2012-04-08 178 views
11

如何能在一個[原子]語句蒙戈做到這一點:的MongoDB:對重複鍵更新插入

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

當它第一次將設置X值,但之後,它只會更新這個語句被執行Y值。

只有MyUniqueKey是唯一鍵的一部分,應該查找重複。

回答

5

我在mongodb用戶組上問過這個問題,答案是這是不可能的,這是一個開放的issue

+4

此問題已在MongoDB 2.4中關閉,您現在可以使用['$ setOnInsert'](http://docs.mongodb.org/manual/reference/operator/setOnInsert /)。 – str 2013-10-03 15:10:31

14

您正在尋找Update命令的upsert option。這裏的文檔應該足夠了。

+0

請你舉個例子。我已經嘗試了許多選項的組合,但我無法選擇插入時設置的字段,但在更新時排除。 – 2012-04-08 04:35:08

+0

有一個字段我喜歡只在第一次插入時設置,但在更新時保持未觸及。 – 2012-04-08 04:37:08

+0

您必須使更新的'query'部分中的'Y'部分代替部分'update'部分。 – 2012-04-08 05:11:54

1

$setOnInsert

我把它叫做 「MyCollection的」 而不是 「MYTABLE」。 你可以做到以下幾點:

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

基本上$組始終運行,除了當文件不存在。然後$ setOnInsert將運行。