express - MongoDB, bagaimana untuk mengesahkan sama ada nilai sudah wujud semasa mengemas kini rekod
淡淡烟草味
淡淡烟草味 2017-05-02 09:22:58
0
3
718

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...

淡淡烟草味
淡淡烟草味

membalas semua(3)
世界只因有你

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

//这个定义是为了什么?是为了防止你老板炒了你所以把代码写的别人看不懂吗?
//var _q = req.body, _qId = mongoose.Types.ObjectId(_q["_id"]);

groups.findById(req.body._id, function (err, docById) {
    if(err){
        res.json({code: 404, msg: "Error"});
    }else{
        groups.findOne({name:req.body.name}, null)
            .exec(function (_err, docByName) {
               console.log(docById._id == docByName._id);
            });
    }
});

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

滿天的星座
 groups.findOne({name:_q["name"]},null).exec(function (_err,_data) {
            console.log(data["_id"] == _data["_id"]);
        });

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

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(String(data["_id"]) == _data["_id"]);
        });
    }
});
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan