Perihalan Senario
Apabila rekod perlu dikemas kini, semak dahulu sama ada nama rekod ini sudah wujud dalam 集合Collection
(tidak termasuk dirinya sendiri).
Arah logik
Langkah 1: Cari diri anda dalam set
Langkah 2: Cari diri anda dalam set mengikut nama anda
Langkah 3: Hakim Step 1的_id
dan Step 2的_id
Sama ada ia sepadan
Langkah 4: Jika kedua-dua _id tidak sepadan, ia akan menggesa "nama sudah wujud" jika tidak, lengkapkan kemas kini rekod
Masalah yang kami hadapi sekarang ialah: Step 1的_id
dan Step 2的_id
tidak boleh sepadan.
Lampirkan kod saya
var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);
groups.findById(_qId,function (err,data) {
if(err){
res.json({code: 404, msg: "Error"});
}else{
groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
console.log(data["_id"] == _data["_id"]);
});
}
});
Mungkin ada yang salah dengan pemikiran saya, atau mungkin ada yang salah dengan kod saya, saya perlu meminta bimbingan daripada pakar...
Izinkan saya menyusun kod anda Sejujurnya, saya tidak begitu menyukai gaya pengekodan anda, kerana semua jenis pengisytiharan pembolehubah yang tidak perlu membawa kepada ekspresi kod yang lemah
Mula-mula saya menganggap anda menggunakan ekspres kerana anda menggunakan req.body
Maksudnya, dua nilai dihantar dalam permintaan siaran anda, satu ialah _id dan satu lagi adalah nama Anda menggunakan dua nilai itu untuk mencari pangkalan data masing-masing, jadi anda mendapat dua hasil carian (. Dua dokumen), dan kemudian anda cuba membandingkan sama ada dokumen yang diperolehi melalui carian _id dan dokumen yang dicari melalui nama adalah perkara yang sama (sudah tentu membandingkan _id adalah untuk membandingkan sama ada dokumen tersebut adalah dokumen yang sama)
Berdasarkan syarat yang anda berikan, saya mula-mula meneka sama ada _id dan nama dalam req.body yang anda berikan sepadan. Mungkin ia datang dari dua dokumen yang berbeza? Atau mungkin terdapat dua dokumen dengan nama yang sama dalam pangkalan data anda, jadi dokumen yang diperoleh melalui carian nama dan dokumen yang diperoleh melalui carian id tidak sama?
Anda boleh cuba mencetak docById dan docByName sebelum console.log terakhir, dan menyiarkan skema luwak anda untuk melihat dengan cara ini sekurang-kurangnya kami tahu jenis pangkalan data yang anda cari
Ini menggunakan findOne, yang hanya akan mengembalikan satu rekod Mungkin terdapat berbilang nilai dengan nama yang sama dalam pustaka, dan yang anda keluarkan berbeza daripada yang anda inginkan
Kaedah telah ditemui: tukarkan _id yang diperoleh dalam Langkah 1 dengan
String()
.Kod penuh