Mongodb 更新多个文档,如果不存在则插入
Mongodb Update Multiple Document, Insert if not Exist
如果设置了 upsert:true,则 mongodb 插入新文档(如果存在)。
我的以下查询适用于单个文档。
唯一索引:- {fid:1,uniqueid:1,atype:1,ftype:1}
db.Notification.updateMany(
{fid : 103,uniqueid:1001,atype:1,ftype:6}
,{ $set: { epoch: 1548484978658,actionbyuserid: 110, title: 'Good Morning To All'}}
,{upsert:true}
);
但是当执行下面的查询时,它不会为不匹配的文档插入新文档;
db.Notification.updateMany(
{fid : {$in:[101,102,103]},uniqueid:1001,atype:1,ftype:6}
,{ $set: { epoch: 1548484978658,actionbyuserid: 110, title: 'Good Morning To All'}}
,{upsert:true}
)
是否还有其他检查和插入未找到的文档?
可以使用bulkWrite
操作
您要更新的数组
const array = [101, 102, 103]
查询批量更新
Model.bulkWrite(
array.map((val) =>
({
updateOne: {
filter: { _id: val, uniqueid: 1001, atype: 1, ftype: 6 },
update: { $set: { epoch: 1548484978658, actionbyuserid: 110, title: 'Good Morning To All'} },
upsert: true
}
})
)
})
如果设置了 upsert:true,则 mongodb 插入新文档(如果存在)。 我的以下查询适用于单个文档。 唯一索引:- {fid:1,uniqueid:1,atype:1,ftype:1}
db.Notification.updateMany(
{fid : 103,uniqueid:1001,atype:1,ftype:6}
,{ $set: { epoch: 1548484978658,actionbyuserid: 110, title: 'Good Morning To All'}}
,{upsert:true}
);
但是当执行下面的查询时,它不会为不匹配的文档插入新文档;
db.Notification.updateMany(
{fid : {$in:[101,102,103]},uniqueid:1001,atype:1,ftype:6}
,{ $set: { epoch: 1548484978658,actionbyuserid: 110, title: 'Good Morning To All'}}
,{upsert:true}
)
是否还有其他检查和插入未找到的文档?
可以使用bulkWrite
操作
您要更新的数组
const array = [101, 102, 103]
查询批量更新
Model.bulkWrite(
array.map((val) =>
({
updateOne: {
filter: { _id: val, uniqueid: 1001, atype: 1, ftype: 6 },
update: { $set: { epoch: 1548484978658, actionbyuserid: 110, title: 'Good Morning To All'} },
upsert: true
}
})
)
})