如何能在一個[原子]語句蒙戈做到這一點:的MongoDB:對重複鍵更新插入
insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?
當它第一次將設置X值,但之後,它只會更新這個語句被執行Y值。
只有MyUniqueKey是唯一鍵的一部分,應該查找重複。
如何能在一個[原子]語句蒙戈做到這一點:的MongoDB:對重複鍵更新插入
insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?
當它第一次將設置X值,但之後,它只會更新這個語句被執行Y值。
只有MyUniqueKey是唯一鍵的一部分,應該查找重複。
我在mongodb用戶組上問過這個問題,答案是這是不可能的,這是一個開放的issue。
您正在尋找Update
命令的upsert option。這裏的文檔應該足夠了。
請你舉個例子。我已經嘗試了許多選項的組合,但我無法選擇插入時設置的字段,但在更新時排除。 – 2012-04-08 04:35:08
有一個字段我喜歡只在第一次插入時設置,但在更新時保持未觸及。 – 2012-04-08 04:37:08
您必須使更新的'query'部分中的'Y'部分代替部分'update'部分。 – 2012-04-08 05:11:54
從
我把它叫做 「MyCollection的」 而不是 「MYTABLE」。 你可以做到以下幾點:
db.mycollection.update(
{ MyUniqueKey: "?" },
{
$set: {"y": "?"},
$setOnInsert: {
MyUniqueKey: "?",
"x": "?",
},
{ upsert: true }
)
基本上$組始終運行,除了當文件不存在。然後$ setOnInsert將運行。
此問題已在MongoDB 2.4中關閉,您現在可以使用['$ setOnInsert'](http://docs.mongodb.org/manual/reference/operator/setOnInsert /)。 – str 2013-10-03 15:10:31