場景描述
當某筆記錄需要更新時,先查詢這條記錄的名稱在集合Collection
中是否已存在(排除本身)。
邏輯方向
Step 1:在集合中尋找自己
Step 2:依照自己的名稱在集合中尋找
Step 3:判斷Step 1的_id
與Step 2的_id
Step 1的_id
與
4:若兩者_id不匹配,則提示「名稱已存在」;反之,完成記錄更新現在遇到的問題是:
Step 1的_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"]); }); } });
可能是我的思路有問題,也可能是我的程式碼有問題,要請各路高手指點...
我來整理一下你的程式碼,說實在的我非常不喜歡你這種程式碼風格,因為各種不必要的變數宣告導致程式碼表意很差
首先我假設你使用的是express,因為你使用req.body
也就是說你某一個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貼出來看一下,這樣子我們起碼知道你在搜尋一個什麼樣的資料庫
這個使用的是findOne,只會回傳一個記錄,也許庫裡面有多個name相同的值吧,你取出來的一個正好是和你想要的不是一個
已經找到方法:將Step 1得到的_id,用
String()
轉化。完整程式碼