Подтвердить что ты не робот

MongoDB: вставить дубликат ключевого обновления

Как это сделать с Mongo в одном [атомном] утверждении:

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

Когда этот оператор выполняется в первый раз, он будет устанавливать значение X, но после этого он будет только обновлять значение Y.

Только MyUniqueKey является частью уникального ключа и должен искать дубликаты.

4b9b3361

Ответ 1

Я задал этот вопрос группе пользователей mongodb, ответ был тот, что это невозможно, и это открытая проблема.

Ответ 2

Вы ищете вариант upsert в команде Update. Документов должно быть достаточно.

Ответ 3

Из

$setOnInsert

Я бы назвал это "MyCollection" вместо "mytable". Вы можете сделать следующее:

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

Как правило, $set работает всегда, за исключением случаев, когда документ не существует. Затем запустится $setOnInsert.