更新批处理文档(如果存在),或者在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