如果MongoDB中已存在文档,请勿将其添加到集合中

时间:2019-03-03 14:18:05

标签: mongodb

是否有一种方法可以删除添加/更新的文档(如果在集合中找到它)而无需对Mongo服务器进行两次请求?如果可以批量完成此操作将是完美的,但我希望听到其他选择或解决方法。

我要寻找的是与upsert选项相反的东西:

var bulk = MyCollection.initializeUnorderedBulkOp();
bulk.find({ x: val }).upsertOnlyIfNotFound({ x: newVal });
bulk.execute();

1 个答案:

答案 0 :(得分:3)

您要寻找的是$setOnInsert

db.MyCollection.update(
  { x: val },
  {
     $setOnInsert: { x: "newVal" }
  },
  { upsert: true }
)

从文档中:

  

如果使用upsert:true进行更新操作,则会插入一个   文档,然后$ setOnInsert将指定的值分配给字段   在文档中。如果更新操作未导致插入,   $ setOnInsert不执行任何操作。