MongoDB upsert与空更新文档

bri*_*rns 6 mongodb mongodb-query

我试图弄清楚如果该文档尚未存在于该集合中,如何将文档插入到集合中.如果文档已经存在,则该语句应为no-op.

我采用的方法是使用带有空更新文档的upsert:

db.collection.update({ ...query... }, { }, { upsert: true })
Run Code Online (Sandbox Code Playgroud)

但Mongo告诉我"更新文件不能为空".如何在不必要地更新现有文档的情况下完成此操作?谢谢.

编辑:我的查询文档如下所示:

{
    "Chromosome" : "4",
    "Position" : 60000,
    "Identifier" : "rs1345",
    "ReferenceAllele" : "N"
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 5

您可以$setOnInsert在更新对象中使用,这仅适用于upsert导致插入的情况:

var query = {
    "Chromosome" : "4",
    "Position" : 60000,
    "Identifier" : "rs1345",
    "ReferenceAllele" : "N"
};
db.collection.update(query, {$setOnInsert: query}, {upsert: true})
Run Code Online (Sandbox Code Playgroud)

  • 它的工作方式不应该是Mongo只是将查询键参数和`$ setOnInsert`值组合在一起来创建要插入的文档.它仍然只是一个操作. (2认同)