更新批处理文档(如果存在),或者在MongoDB中插入
我有一组数组中的文档,如果我与更新批处理文档(如果存在),或者在MongoDB中插入,mongodb,mongodb-query,nosql,Mongodb,Mongodb Query,Nosql,我有一组数组中的文档,如果我与insertManyquery一起使用,它可以正常工作。现在,我想在查询中添加条件,如果文档具有相同的产品\u ID则更新它。如何使用带有updateMany的文档数组。我不想一个接一个地更新 文档数组:首次插入 [ {_id:"5ea0428e5f725d00079afaab", product_id:345, title:"Car"}, {_id:"5e40428e5f725d00079afa4b", product_id:456, title:"Ball"},
insertMany
query一起使用,它可以正常工作。现在,我想在查询中添加条件,如果文档具有相同的产品\u ID则更新它。如何使用带有updateMany
的文档数组。我不想一个接一个地更新
文档数组:首次插入
[
{_id:"5ea0428e5f725d00079afaab", product_id:345, title:"Car"},
{_id:"5e40428e5f725d00079afa4b", product_id:456, title:"Ball"},
{_id:"5e60428e5f725d00079afaab", product_id:555, title:"Dog"},
]
预期的代码是这样的:第二次更新
,因为产品id
已经存在
return db.collection("cars").updateMany([
{_id:"5ea0428e5f725d00079afaab", product_id:345, title:"Hen"},
{_id:"5e40428e5f725d00079afa4b", product_id:456, title:"Cow"},
{_id:"5e60428e5f725d00079afaab", product_id:555, title:"Goat"},
]).then((items) => {
return { statusCode: 200, body: items }; })
.catch(err => {
console.log('=> an error occurred: ', err);
return { statusCode: 500, body: 'error' };
});
您可以.map()
将数组转换为一个操作数组,并使用来执行它们。请注意,您正在传递的\u id
必须是唯一的:
var数据=[
{编号:“5ea0428e5f725d00079afaab”,产品编号:345,标题:“Car”},
{编号:“5e40428e5f725d00079afa4b”,产品编号:456,标题:“球”},
{编号:“5e60428e5f725d00079afaab”,产品编号:555,标题:“狗”},
];
var upserts=data.map(doc=>({
“替换一”:{
筛选器:{product\u id:doc.product\u id},
替换:doc,
厄普塞特:是的
}
}));
控制台日志(upserts)代码>出现错误:bulkWrite仅支持insertOne、insertMany、updateOne、updateMany、removeOne、removeMany、deleteOne、deleteMany