我正在編寫代碼來管理通過網站使用NodeJS的純MongoDB驅動程序的商家集合。當商家試圖確認他們的賬戶時,我發生了麻煩。預計代碼使用$ unset從數據庫中刪除值,從而激活商家的賬戶。相反,查詢返回true,但確認字段保持不變。這裏是通過db.merchants.find印在數據庫中的問題的商家之一的一個例子({})(添加了換行更好的可讀性):
{ "email" : "[email protected]", "password" : "<hashed password is here>",
"salt" : "<salt is here>", "access" : "merchant",
"created" : 1444000000000, "confirm" : "bKEQD0aiV8aXIQPY4CUxCm7KGSZ2pFJM",
"name" : "Test user",
"contact" : { "name" : "Test User",
"address" : "123 Cedar Ln N",
"city" : "Some City", "state" : "AA",
"zip" : "00000", "country" : "USA",
"phone" : "5555555555" },
"_id" : ObjectId("56133111d30ce5d4736323cb") }
AssumEffectively,這是在所使用的JS爲了將該項插入到數據庫:
db.collection("merchants").insert({
name: "Test user",
email: "[email protected]",
.... more fields....,
confirm: "bKEQD0aiV8aXIQPY4CUxCm7KGSZ2pFJM"
}, someCallback);
...這裏是我試圖取消設置「確認」字段:
db.collection("merchants").findOne({email: "[email protected]"}, function(err, user) {
if(err) return handleError();
if(!user) return sendFailureMessageToClient();
if(client.confirm == user.confirm) {
db.collection("merchants").update({_id: user.id},
{$unset: {confirm: true}}, someCallback);
}
}
我確信,上述更新命令實際上是北ng執行。
我認爲對於上面的數據有趣的事情之一是_id字段在結尾......應該是通常發生的事情嗎?這會搞亂update命令的$ unset嗎?如果這不是問題,那麼是什麼?
在此先感謝您的幫助。
編輯:我展示了爲什麼我使用單獨的findOne請求,然後更新。
這似乎沒有幫助...此外,我很確定我使用的user._id已經是ObjectID類型。 – KillerByte