node.js - findAndModify 在 node.js/MongoDb 中的用法

标签 node.js mongodb findandmodify

我有一个集合,其中显示了用户最喜欢的电影的列表。 这是一个示例数据集...

{
        "_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 中,我相信唯一的方法是

  1. 使用“查找”查找文档
  2. 通过附加到 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/

相关文章:

mongodb - MongoDB 中数十亿小文档的快速搜索策略

java - MongoDB - $set with findAndModify 或 update on embedded documents

mongodb - 使用 grails gorm 在 mongodb 中使用 findAndModify

node.js - Azure Functions 本地 HTTP 触发器问题及解决方案

node.js - Gradle "... occurred starting process ' 命令 'npm' '"在 Mac 上

javascript - 如何在 express.js 中呈现 redis 记录?

intellij-idea - Intellij - 如何在选定文本中查找+替换?

html - 发送和接收PCM样本

python - 如何使用 Pymongo 将两个字段的值传递到函数中?

mongodb - 使用Go驱动程序在MongoDB中运行命令