0
我有一個集合,它顯示了用戶最喜歡的電影列表。 下面是一個簡單的數據集...findAndModify在node.js/MongoDb中的用法
{
"_id" : ObjectId("545c08dcc4d2b8a0243dd4db"),
"mail" : "[email protected]",
"name" : "Mickey Mouse",
"favorite_movies" : [
{
"name" : "The Green Mile",
"Year" : "1992"
},
{
"name" : "Raging Bull",
"Year" : "1980"
}
],
"watched_movies" : [
{
"name" : "The Green Mile",
"Year" : "1992"
},
{
"name" : "Jaws",
"Year" : "1976"
}
]
}
現在_id 545c08dcc4d2b8a0243dd4db
給出一個電影
{
"name" : "InterStellar",
"Year" : "2014"
}
,如果我需要把它添加到watched_movies,在Node.js的/ MongoDB中,我相信唯一的辦法是
- 使用查找
- 做一個findAndModify上找到的文件通過附加查找文檔到watched_movies數組。
第2步是基於例如這裏 http://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html
有沒有更好的方式來做到這一點?特別是我可以避免步驟#1?
這是我如何做第二步。 但我不得不執行步驟#1獲得「watched_movies」元素,然後追加新的電影將它構建movielist
//try to update
collection.findAndModify(
{'_id':new BSON.ObjectID(id)}, //query
[['_id','asc']], //sort order
{$set: {"watched_movies": movielist}}, //replacement
{new: true}, //options
function(err, newObject){
if(err) {
console.warn(err.message);
} else {
console.log("Updated !! " + JSON.stringify(newObject));
res.send(object);
}
});
我也願意就改進這一模式設計的建議。
感謝你的小費! $ addToSet很棒。但這不起作用findAndModify.I得到這個錯誤「異常:nextsafe():{$ err:」can not canonical query:badvalue Code:17287.但它適用於collection.update(),雖然它不' t返回更新的文檔。 – EnnioMorricone 2014-11-07 03:30:33
@EnnioMorricone我把排序參數回來,現在它測試了很好現在。我沒有意識到這一直是必需的。 – JohnnyHK 2014-11-07 03:41:52