考慮以下
用戶採集樣品&用戶文檔
{
"_id" : ObjectId("575c01f7b8e5999addeb598c"),
"username" : "[email protected]",
"password" : "<password>",
"firstName" : "Test,
"lastName" : "User"
}
我試圖運行的更新請求加入其目的是要在userData.eventData條目是一個數組
在蒙戈腳本我可以做
> db.Users.update({_id: ObjectId("575c01f7b8e5999addeb598c")}, {"$addToSet":{"userData.eventData":"My event"}})
我有以下結果:用戶數據被(使用驅動程序版本2.1.21)
// with a properly initialized db object
db.collection("Users").update({"_id" : ObjectId("575c01f7b8e5999addeb598c")}, {"$addToSet": { "userData.eventData": "My Event"}}, function(err, result) {
// do something
});
我爲對象和EVENTDATA作爲嵌套陣列
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.Users.find({_id: ObjectId("575c01f7b8e5999addeb598c")})
{ "_id" : ObjectId("575c01f7b8e5999addeb598c"), "username" : "[email protected]", "password" : "<password>", "firstName" : "Test", "lastName" : "User", "userData" : { "eventData" : [ "My event" ] } }
當運行在蒙戈相同的邏輯創建收到以下回應
result:Object
n:0
nModified:0
ok:1
實際上數據庫條目沒有改變。
難道這就是它的行爲方式嗎?我可以很容易地通過創建userData.eventData陣列解決這個問題,但我發現令人不安的事實是節點的蒙戈司機和蒙戈外殼並沒有表現在這
由於同在您的幫助&建議
編輯13/6/16 錯誤是在我的身邊,我錯過了一個'新'之前的'ObjectId(...'在節點。它的行爲完全一樣,在mongo殼(即'userData'創建作爲一個對象,它包括'eventData'數組)
沒問題,然後:)
'n:0'表示你的更新沒有找到匹配的文件,所以你可能會查詢錯誤的數據庫或類似的東西。 – JohnnyHK
的確,訣竅是在節點代碼中的ObjectId前添加一個'new'。非常感謝@JohnnyHK(我編輯了我的原始文章) – Boris