我知道这可能是一个愚蠢的问题,但我在电子书上看到MongoDB插入中有一个upsert
选项。我找不到有关此问题的适当文件。有人可以教我这个吗?
答案 0 :(得分:99)
由于upsert
被定义为“当没有文档与查询条件匹配时创建新文档”的操作,upserts
中insert
没有地方命令。它是update
命令的一个选项。如果您执行如下命令,它将作为update
,if 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听起来就像更新并插入在一起。 因此,如果无法更新,它将插入。