是否有一种方法可以删除添加/更新的文档(如果在集合中找到它)而无需对Mongo服务器进行两次请求?如果可以批量完成此操作将是完美的,但我希望听到其他选择或解决方法。
我要寻找的是与upsert选项相反的东西:
var bulk = MyCollection.initializeUnorderedBulkOp();
bulk.find({ x: val }).upsertOnlyIfNotFound({ x: newVal });
bulk.execute();
答案 0 :(得分:3)
您要寻找的是$setOnInsert。
db.MyCollection.update(
{ x: val },
{
$setOnInsert: { x: "newVal" }
},
{ upsert: true }
)
从文档中:
如果使用upsert:true进行更新操作,则会插入一个 文档,然后$ setOnInsert将指定的值分配给字段 在文档中。如果更新操作未导致插入, $ setOnInsert不执行任何操作。