express - MongoDB 在更新記錄時,如何驗證某個值是否已存在
淡淡烟草味
淡淡烟草味 2017-05-02 09:22:58
0
3
645

場景描述
當某筆記錄需要更新時,先查詢這條記錄的名稱在集合Collection中是否已存在(排除本身)。

邏輯方向
Step 1:在集合中尋找自己
Step 2:依照自己的名稱在集合中尋找
Step 3:判斷Step 1的_idStep 2的_idStep 1的_id

Step 2的_id

4:若兩者_id不匹配,則提示「名稱已存在」;反之,完成記錄更新現在遇到的問題是:Step 1的_id

Step 2的_id

匹配不上。

附上我的程式碼

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"]); }); } });
可能是我的思路有問題,也可能是我的程式碼有問題,要請各路高手指點...
淡淡烟草味
淡淡烟草味

全部回覆 (3)
世界只因有你

我來整理一下你的程式碼,說實在的我非常不喜歡你這種程式碼風格,因為各種不必要的變數宣告導致程式碼表意很差

首先我假設你使用的是express,因為你使用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); }); } });

也就是說你某一個post一類的請求中傳來兩個數值,一個是_id,一個是name,你用兩個值分別對資料庫裡做搜索,於是獲得了兩個搜尋結果(兩個doc),然後你試著比較透過_id搜尋得到的doc和透過name搜尋的doc是不是同一個東西(比較_id當然就是比較是不是同一個doc了啊)

是基於你給的條件,我先猜測你給的這個req.body裡面的_id和name是不是匹配的,也許他們本來就來自兩個不同的doc?又或者你的資料庫中確實存在兩個有相同name的doc,那麼現在透過name搜尋取得的doc和透過id搜尋取得doc就不是同一個?

你可以嘗試在最後的console.log之前先列印一下docById和docByName,並且把你的mongoose scheme貼出來看一下,這樣子我們起碼知道你在搜尋一個什麼樣的資料庫

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

    這個使用的是findOne,只會回傳一個記錄,也許庫裡面有多個name相同的值吧,你取出來的一個正好是和你想要的不是一個

      刘奇

      已經找到方法:將Step 1得到的_id,用String()轉化。

      完整程式碼

      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"]); }); } });
        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!