【问题标题】:Is there an "upsert" option in the mongodb insert command?mongodb insert 命令中是否有“upsert”选项?
【发布时间】:2013-11-27 06:15:09
【问题描述】:

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

【问题讨论】:

标签: mongodb mongodb-query


【解决方案1】:

由于upsert 被定义为“当没有文档匹配查询条件时创建一个新文档”的操作,所以在insert 命令中没有upserts 的位置。这是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 不能包含更新运算符。

【讨论】:

  • 除了更新之外,db.collection.save() 还提供和 upsert 的可能性。
  • 如果typeof( obj._id ) != "undefined",它被翻译成this.update( { _id : obj._id } , obj , true ),但它只不过是一个包装器。
  • @zero323 true 而不是 True :)
  • @AbdulHameed 是的。从外观上看,我很确定它是从 Python 会话中复制的 :) 已更正,谢谢。
  • 你的意思是“它的替换不能包含更新操作符”...替换是一个文档值,它怎么可能曾经包含操作符?
【解决方案2】:

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

如果您碰巧将文档传递给db.collection.insert(),该文档已经在集合中,因此具有类似于现有_id_id,它将引发重复键异常。

【讨论】:

  • 谢谢。正如文档解释的那样,upsert 仅支持更新和保存
猜你喜欢
  • 2017-09-09
  • 2020-07-10
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多