使用$ in子句mongodb更新集合

我有一个需要更新的mongo集合(大约12万个文档),并且有一个值数组,我希望将该值作为过滤器来匹配要更新的文档。 对于每个文档,我需要添加具有相同值的相同属性。

是否可以在更新查询中使用mongodb中的$ in子句来实现该目标?

现在,我只是遍历值数组并一次更新一个文档,这感觉不对。

let ps = ["user1","user2"]; // my array
for(let i = 0; i < ps.length; i++){
  // my function that updates on document and adds a property to it.
  await Partname.update_partname(ps[i],"has_image",true);
}

这基本上就是我想要实现的:

db.getcollection('partnames').update({
  user: {
      $in: ["user1","user2"]
  }
},true)

感谢您的帮助。

diegod3433 回答:使用$ in子句mongodb更新集合

这里有两件事,

1。。如果您的收藏夹有 schema ,则

请确保您更新架构,以使"has_image"字段具有正确的类型,然后触发查询。

使用此查询:

db.collection("logs").update({"users": {$in: ["user1","user2"]}},{$set:{"has_image": true}},{multi: true},(err,data) =>{
          //todo
      })

此处的关键是对更新查询使用 multi: true 选项,该选项使您可以一次更新多个文档。

此外,您还必须在更新查询中使用$set

2。。如果您没有任何架构可用于收集,则

您有空,只需执行上述查询即可。

  

建议:

     

如果要在数组中的值中使用$   运算符是用户的 id (在集合中为ObjectId),   然后确保先将其转换为ObjectId

本文链接:https://www.f2er.com/3160919.html

大家都在问