MongoDB UpdateOne не обновляет запись - PullRequest
0 голосов
/ 10 мая 2018

Я испытываю очень странное поведение при попытке обновить одну запись. Я использую метод UpdateOne (), и он работает как положено в 99% случаев, НО иногда я получаю следующие результаты: enter image description here Как видите, MongoDB смог найти мою запись, но она не была обновлена. Я пытался изменить запись записи, которая, в соответствии с документами, может помочь:

collection.WithWriteConcern(WriteConcern.WMajority.With(journal: true))

но это не так.

Вот как я обновляю свои записи:

collection.UpdateOne(x => x.Id == _myObject.Id.AsObjectId, updateDef);

Обновление определения:

var updateDef = new UpdateDefinitionBuilder<IndexedProfileData>().Set(x => x.Property.ChildCollection, newCollection);

Буду очень признателен, если кто-нибудь сможет объяснить мне, почему это происходит и как исправить это поведение.

1 Ответ

0 голосов
/ 11 мая 2018

MongoDB не будет обновлять документ, если он уже находится в «обновленном» состоянии.

Например, при использовании оболочки mongo:

> db.test.find()
{"_id": 0, "a": 0}

> db.test.update({_id:0}, {$set:{a:1}})
WriteResult({
  "nMatched": 1,
  "nUpserted": 0,
  "nModified": 1
})

, поскольку a - это 0 и мы устанавливаем a в 1, обновление изменило документ (nMatched: 1, nModified: 1).

> db.test.find()
{"_id": 0, "a": 1}

> db.test.update({_id:0}, {$set:{a:1}})
WriteResult({
  "nMatched": 1,
  "nUpserted": 0,
  "nModified": 0
})

Если мы пытаемся установить a в1 снова оператор update нашел документ, но понял, что ему не нужно выполнять какую-либо работу (nMatched: 1, nModified: 0).

...