MongoDB 使用空更新文档更新插入

MongoDB upsert with empty update document

我正在尝试弄清楚如何将文档插入到集合中,前提是该文档尚未存在于该集合中。如果文档已经存在,则语句应该是空操作。

我使用带有空更新文档的更新插入的方法:

db.collection.update({ ...query... }, { }, { upsert: true })

但是 Mongo 告诉我 "Update documents cannot be empty"。如何在不不必要地更新现有文档的情况下完成此操作?谢谢

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

{
    "Chromosome" : "4",
    "Position" : 60000,
    "Identifier" : "rs1345",
    "ReferenceAllele" : "N"
}

您可以通过在更新对象中使用 $setOnInsert 来执行此操作,这仅适用于更新插入导致插入的情况:

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

在查询中使用的字段上创建唯一索引,然后使用插入。如果相同的文档已经存在,插入将失败。

(无论如何你可能需要一个索引来加快这个操作)