我有一个集合,其中显示了用户最喜欢的电影的列表。 这是一个示例数据集...
{
"_id" : ObjectId("545c08dcc4d2b8a0243dd4db"),
"mail" : "mickey@mouse.com",
"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"
}
如果我需要将其添加到 Node.js/MongoDB 中的 Watched_movies 中,我相信唯一的方法是
- 使用“查找”查找文档
- 通过附加到 Watched_movies 数组,对找到的文档执行 findAndModify。
步骤 #2 基于此处的示例 http://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html
有更好的方法吗?具体来说我可以避免步骤#1吗?
这是我执行第 2 步的方法。
但我被迫执行步骤#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);
}
});
我也愿意接受有关改进此架构设计的建议。
最佳答案
您可以使用 $push
通过一次 findAnyModify
调用来完成此操作或$addToSet
数组运算符直接将新电影添加到 watched_movies
数组中:
var movie = {
"name" : "InterStellar",
"Year" : "2014"
};
collection.findAndModify(
{'_id':new BSON.ObjectID(id)},
[['_id','asc']],
{$addToSet: {"watched_movies": movie}},
{new: true},
function(err, newObject){
if(err) {
console.warn(err.message);
} else {
console.log("Updated !! " + JSON.stringify(newObject));
res.send(newObject);
}
});
关于node.js - findAndModify 在 node.js/MongoDb 中的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26792787/