mongodb insert命令中是否有“upsert”选项?

时间:2013-11-14 09:42:16

标签: mongodb mongodb-query

我知道这可能是一个愚蠢的问题,但我在电子书上看到MongoDB插入中有一个upsert选项。我找不到有关此问题的适当文件。有人可以教我这个吗?

3 个答案:

答案 0 :(得分:99)

由于upsert被定义为“当没有文档与查询条件匹配时创建新文档”的操作,upsertsinsert没有地方命令。它是update命令的一个选项。如果您执行如下命令,它将作为updateif there is a document matching query, or as an insert with document described by update as an argument

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

MongoDB 3.2增加了replaceOne

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

具有类似的行为,但其replacement不能包含更新运算符。

答案 1 :(得分:5)

与PKD提供的链接一样,db.collection.insert()不提供upsert可能性。相反,mongo insert将新文档插入到集合中。只能使用db.collection.update()db.collection.save()进行Upsert。

如果您碰巧将文档传递给集合中已有的db.collection.insert(),因此_id与现有_id类似,则会抛出重复的键异常。< / p>

答案 2 :(得分:0)

Upsert听起来就像更新并插入在一起。 因此,如果无法更新,它将插入。