Mongoose: schema.pre('save') tidak dipicu oleh MyModel.update()

Dibuat pada 16 Jul 2011  ·  11Komentar  ·  Sumber: Automattic/mongoose

contoh.js:

var mongoose = require('mongoose')
  , Schema = mongoose.Schema

mongoose.connect('mongodb://localhost/test')

var Thing = new Schema({
  title : String,
  content : String
})

Thing.pre('save', function(next){
  console.log("saving: %s (%s)", this.title, this.content)
  next()
})

var MyThing = mongoose.model('Thing', Thing)

var example = new MyThing({
  title : 'foo',
  content : 'bar'
})

example.save(function(err){
  MyThing.update({title:'foo'},{content:'baz'}, function(err, rs){
    console.log(rs)
  })  
})

Keluaran:

$ node example.js 
saving: foo (bar)
1

Pra dipicu oleh penyimpanan awal, tetapi bukan pembaruan.

Komentar yang paling membantu

Ini bukan bug. pre save adalah pengait yang diaktifkan pada instance saat metode penyimpanannya dipanggil, bukan pada model saat pembaruan dipanggil.

Model.update mari Anda mengirim operasi $set atom langsung ke mongodb.

Semua 11 komentar

Ini bukan bug. pre save adalah pengait yang diaktifkan pada instance saat metode penyimpanannya dipanggil, bukan pada model saat pembaruan dipanggil.

Model.update mari Anda mengirim operasi $set atom langsung ke mongodb.

Ini adalah fitur yang ingin saya miliki; sangat membantu saat memasukkan data yang jarang.

@aheckman Saya setuju dengan @martindale , saya merasa bahwa di UI tempat kami memiliki pembaruan formulir $.ajax seperti dengan meneruskan req.body._id ke rute pos, beberapa jenis metode pra akan berguna. Contoh kasus penggunaan adalah saat Anda mengirimkan dua angka, dan Anda ingin model memiliki pre('save') untuk menghitung total.

mungkin pre('update') ofc

Saya telah memperhatikan ini juga jadi saya menganggap ini tidak dianggap sebagai peningkatan yang layak ditambahkan.

Saya memutuskan untuk menggunakan pendekatan aheckmann di mana saya perlu memperbarui bidang tanggal updatedOn . Namun, di mana audit adalah sesuatu yang ingin saya gunakan di tingkat middleware, pendekatan ini berbau.

Menyetel tanggal dalam kasus saya sangat sensitif terhadap saat penyimpanan berkomitmen ke mongodb karena saya memiliki proses latar belakang memuat dokumen yang diperbarui berdasarkan tanggal & jendela waktu yang bergerak. Saya tidak mengatakan akan ada banyak penyimpangan waktu tetapi pendekatan aheckmann vs. pre('update') kemungkinan akan mengandung lebih banyak penyimpangan pada saat penyimpanan terjadi.

Saya ingin melihat beberapa opsi middleware di sini.

Jadi apa solusinya? Saya berharap pre('save') akan menangkap pembaruan, yang secara semantik tampak seperti menyimpan bagi saya. Karena pembaruan sangat umum, itu membuat save hook menjadi kurang berharga.

Saya tidak yakin apakah ada yang masih menonton ini atau tidak, tetapi melihat dokumentasi Mongoose -
Luwak
di bawah bagian _Notes on findAndUpdate()_ membuat referensi ke masalah/964 yang menjelaskan mengapa ini tidak berhasil. Semoga membantu! :)

Ini omong kosong. kami tidak dapat melakukan apa pun async di setter. idiot.

ini adalah utas yang sangat lama tapi ok. Ada pra yang sebenarnya inturup ini atau sudah tahu sejak posting.

Semuanya baik-baik saja, saya melanjutkan dan mengatur ulang kode saya untuk membuat findById dan kemudian penyimpanan berikutnya, jadi kait pra simpan untuk memberi kata sandi masih berfungsi. Saya kira itu adalah apa itu, meskipun akan menyenangkan untuk memiliki kait pra-pembaruan juga, masih akan membutuhkan dua pertanyaan untuk melayani operasi karena Anda harus membaca data dan memeriksa apakah itu telah berubah dengan isModifed

Menandai #964 dan menabrak minat.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat