【发布时间】:2012-04-21 00:44:37
【问题描述】:
如何在一个 [atomic] 语句中使用 Mongo 做到这一点:
insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?
该语句第一次执行时会设置X值,之后只会更新Y值。
只有 MyUniqueKey 是唯一键的一部分,应该查找重复项。
【问题讨论】:
标签: mongodb mongodb-query
如何在一个 [atomic] 语句中使用 Mongo 做到这一点:
insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?
该语句第一次执行时会设置X值,之后只会更新Y值。
只有 MyUniqueKey 是唯一键的一部分,应该查找重复项。
【问题讨论】:
标签: mongodb mongodb-query
来自
我会称它为“MyCollection”而不是“mytable”。 您可以执行以下操作:
db.mycollection.update(
{ MyUniqueKey: "?" },
{
$set: {"y": "?"},
$setOnInsert: {
MyUniqueKey: "?",
"x": "?",
},
{ upsert: true }
)
基本上 $set 总是运行,除非文档不存在。然后 $setOnInsert 将运行。
【讨论】:
您正在寻找Update 命令上的upsert option。这里的文档应该足够了。
【讨论】:
Y 成为更新的 query 部分的一部分,而不是 update 部分的一部分。
我在 mongodb 用户组上问过这个问题,答案是不可能的,这是一个开放的issue。
【讨论】:
$setOnInsert。