MongoDB upsert与空更新文档

时间:2015-06-10 01:14:12

标签: mongodb mongodb-query

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

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

(无论如何你可能想要一个索引来快速完成这个操作)