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

ast*_*anu 49 mongodb mongodb-query

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

zer*_*323 107

由于upsert被定义为操作是" 创建时没有文档的查询条件相匹配的新文件 "不存在用于地方upsertsinsert命令.它是update命令的一个选项.如果执行如下所示的命令update,queryinsertupdate它将作为一个文件匹配,或作为一个参数描述的文档.

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

MongoDB 3.2增加了replaceOne:

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

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

  • 除了更新之外,db.collection.save()还提供了向上更新的可能性。 (2认同)
  • 它被翻译成`this.update({_ id:obj._id},obj,true)`如果`typeof(obj._id)!="undefined"`但它只不过是一个包装器. (2认同)
  • 您的意思是“其替换不能包含更新运算符” ...替换是文档值,怎么可能*永远*包含运算符? (2认同)

glo*_*mph 5

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

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