我有一个带有对象的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"
}
]
}
答案 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
)