16

如何在一个 [atomic] 语句中使用 Mongo 执行此操作:

insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?

第一次执行此语句时,它将设置 X 值,但之后它只会更新 Y 值。

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

4

3 回答 3

16

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

于 2012-04-08T04:14:02.207 回答
5

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

于 2012-05-17T09:07:02.790 回答
5

$setOnInsert

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

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

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

于 2017-01-17T13:33:50.000 回答