Di bawah ini adalah kode saya
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var Cat = mongoose.model('Cat', {
name: String,
age: {type: Number, default: 20},
create: {type: Date, default: Date.now}
});
Cat.findOneAndUpdate({age: 17}, {$set:{name:"Naomi"}},function(err, doc){
if(err){
console.log("Something wrong when updating data!");
}
console.log(doc);
});
Saya sudah memiliki beberapa catatan dalam database mongo saya dan saya ingin menjalankan kode ini untuk memperbarui nama yang usianya 17 dan kemudian mencetak hasilnya di akhir kode.
Namun, mengapa saya masih mendapatkan hasil yang sama dari konsol (bukan nama yang dimodifikasi) tetapi ketika saya pergi ke mongo db command line dan ketik " db.cats.find();
". Hasilnya datang dengan nama yang dimodifikasi.
Kemudian saya kembali menjalankan kode ini lagi dan hasilnya dimodifikasi.
Pertanyaan saya adalah: Jika data itu diubah, lalu mengapa saya masih mendapatkan data asli saat pertama kali console.log itu.
{ returnOriginal: false }
Bagi siapa pun yang menggunakan driver Node.js alih-alih Mongoose, Anda sebaiknya menggunakan
{returnOriginal:false}
bukan{new:true}
.sumber
Jadi, "findOneAndUpdate" memerlukan opsi untuk mengembalikan dokumen asli. Dan, opsinya adalah:
Shell MongoDB
{returnNewDocument: true}
Ref: https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/
Luwak
{new: true}
Ref: http://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate
API Driver Node.js MongoDB:
{returnOriginal: false}
Ref: http://mongodb.github.io/node-mongodb-native/3.0/api/Collection.html#findOneAndUpdate
sumber
'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER
Secara default findOneAndUpdate mengembalikan dokumen asli. Jika Anda ingin mengembalikan dokumen yang dimodifikasi, berikan objek opsi
{ new: true }
ke fungsi:sumber
_id
null?Untuk siapa pun yang menemukan ini menggunakan gaya ES6 / ES7 dengan janji-janji asli, berikut adalah pola yang dapat Anda adopsi ...
sumber
Ini adalah kode yang diperbarui untuk
findOneAndUpdate
. Berhasil.sumber
Pemelihara luwak di sini. Anda perlu mengatur
new
opsi ketrue
(atau, setara,returnOriginal
kefalse
)Lihat dokumen Mongoose
findOneAndUpdate()
dan tutorial ini tentang memperbarui dokumen dalam bahasa Mongoose .sumber
Jika Anda ingin mengembalikan dokumen yang diubah, Anda perlu mengatur opsi
{new:true}
referensi API yang dapat Anda gunakanCat.findOneAndUpdate(conditions, update, options, callback) // executes
Diambil oleh Mongoose API resmi http://mongoosejs.com/docs/api.html#findoneandupdate_findOneAndUpdate Anda dapat menggunakan parameter berikut
Implementasi lain yang tidak diungkapkan dalam halaman API resmi dan yang saya lebih suka gunakan adalah
Promise
implementasi dasar yang memungkinkan Anda untuk memiliki di.catch
mana Anda dapat menangani semua berbagai kesalahan Anda di sana.sumber
Di bawah ini menunjukkan permintaan untuk luwak
findOneAndUpdate
. Di sininew: true
digunakan untuk mendapatkan dokumen yang diperbarui danfields
digunakan untuk bidang tertentu.misalnya.
findOneAndUpdate(conditions, update, options, callback)
sumber
Saya tahu, saya sudah terlambat tetapi izinkan saya menambahkan jawaban sederhana dan berfungsi di sini
sumber