Ответ 1
Я задал этот вопрос группе пользователей mongodb, ответ был тот, что это невозможно, и это открытая проблема.
Как это сделать с Mongo в одном [атомном] утверждении:
insert mytable set MyUniqueKey = ?, X = ? on duplicate key update Y = ?
Когда этот оператор выполняется в первый раз, он будет устанавливать значение X, но после этого он будет только обновлять значение Y.
Только MyUniqueKey является частью уникального ключа и должен искать дубликаты.
Я задал этот вопрос группе пользователей mongodb, ответ был тот, что это невозможно, и это открытая проблема.
Вы ищете вариант upsert в команде Update
. Документов должно быть достаточно.
Из
Я бы назвал это "MyCollection" вместо "mytable". Вы можете сделать следующее:
db.mycollection.update(
{ MyUniqueKey: "?" },
{
$set: {"y": "?"},
$setOnInsert: {
MyUniqueKey: "?",
"x": "?",
},
{ upsert: true }
)
Как правило, $set работает всегда, за исключением случаев, когда документ не существует. Затем запустится $setOnInsert.