node.js - 在 Mongoose 中将数组更新到文档中

标签 node.js mongodb mongoose

我有一个包含对象的 json 数组,我正在执行以下循环以使用 mongoose 将数据向上插入(插入或更新)到 MongoDB 中:

var currentMiniApp;
 function retResult(err) {
    if (err) {
        console.log(err);
    }
 }

 for (var i = 0 ; i < miniappData.miniapps.length; i++) {
    currentMiniApp = new MiniApp(miniappData.miniapps[i]);
    MiniApp.findOneAndUpdate(
        {id: currentMiniApp.id},
        currentMiniApp,
        {upsert: true},
        retResult);
 }

如何在不使用循环的情况下在一条命令中完成?
我希望文档将包含数据数组中的项目
我的数据如下:

{
  "miniapps" : 
  [ 
  {
    "id":"app1",
    "icon" : "256fko6.png"
  }, 
  {
    "id":"app2",
    "icon" : "icon60x60.png"
  }
  ]
}

最佳答案

考虑使用 $addToSet 运算符 $each upsert 中的修饰符 update 。此更新操作将多个值添加到数组,除非这些值已经存在,在这种情况下 $addToSet 对该数组不做任何事情:

var miniAppids = [];
for (var i = 0 ; i < miniappData.miniapps.length; i++) {
    currentMiniApp = new MiniApp(miniappData.miniapps[i]);
    miniAppids.push(currentMiniApp.id);
};

MiniApp.update(
    { "id": { "$in": miniAppids } }, 
    { "$addToSet": { "miniapps": { "$each": miniappData.miniapps } } }, 
    { "upsert": true }, 
    retResult
)

关于node.js - 在 Mongoose 中将数组更新到文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30047241/

相关文章:

javascript - 异步/等待返回 Promise { <pending> }

node.js - 根据类型 y 分组的字段 x 的前 1 个返回 mongoDB 中的记录

node.js - $limit 和 $skip 在 MongoDB 聚合管道中作为可选

javascript - 如何记录 NodeJS 原生 (V8) 模块?

node.js - 如何使用 mocha-phantomjs 测试 Node js 应用程序

node.js - 如何进行 Twitter OAuth Echo 验证调用?

Java - MongoDB 不区分大小写,不检查完全匹配

javascript - 如何在 Mongoose 中应用 like 查询?

java - 在 Java 中从 MongoDB 读取 Integer 字段时出现长类型转换错误

javascript - 如何从一个函数中的多个模式检索和传递数据