MongoDB:在重复密钥更新时插入

Ali*_*iba 14 mongodb mongodb-query

如何在一个[原子]语句中使用Mongo:

insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?
Run Code Online (Sandbox Code Playgroud)

当第一次执行此语句时,它将设置X值,但之后它将仅更新Y值.

只有MyUniqueKey是唯一键的一部分,应该查找重复项.

Gat*_* VP 15

您正在寻找命令上的upsert选项Update.这里的文档应该足够了.

  • 你能举个例子吗?我已经尝试了许多选项组合,但我无法选择要在插入时设置的字段,但在更新时将被排除。 (2认同)

Ali*_*iba 5

我在mongodb用户组上问了这个问题,答案是它不可能,这是一个悬而未决的问题.

  • 这个问题在MongoDB的2.4被关闭,你现在可以使用[`$ setOnInsert`(http://docs.mongodb.org/manual/reference/operator/setOnInsert/). (4认同)

Mat*_*Asp 5

$setOnInsert

我会称它为“MyCollection”而不是“mytable”。您可以执行以下操作:

db.mycollection.update(
   { MyUniqueKey: "?" },
   {  
      $set: {"y": "?"},
      $setOnInsert: {
          MyUniqueKey: "?",
           "x": "?",
   },
   { upsert: true }
)
Run Code Online (Sandbox Code Playgroud)

基本上 $set 总是运行,除非文档不存在。然后 $setOnInsert 将运行。