将数组插入到mongoose中的文档中

时间:2015-05-05 07:58:49

标签: 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"
  }
  ]
}

1 个答案:

答案 0 :(得分:2)

请考虑在您的upsert $addToSet 中使用$each运算符和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
)