MongoDB Save не удаляет уже существующие элементы - PullRequest
0 голосов
/ 09 ноября 2011

У меня странная ситуация с MongoDB Save (драйвер C #). Я сохраняю существующий документ (ключ находится внутри сохраняемого BsonDocument). Мое утверждение Save выглядит следующим образом:

SafeModeResult result = moleculeCollection.Save(moleculeDoc, SafeMode.True);

, где молекулой является документ BsonDocument. Сохраняемые элементы в молекуле Doc BsonDocument могут различаться. Иногда элементы в существующем документе в базе данных удаляются, потому что сохраняемый MoleDoc BsonDocument больше не содержит их.

Проблема в том, что после успешного сохранения некоторые элементы остаются в документе, хранящемся в базе данных, даже если они не существовали в сохраняемом BsonDocument. Когда я сохраняю ВТОРОЕ время, эти элементы обычно исчезают.

Я тщательно изучил документ BsonDocument до сохранения, и он определенно не содержит определенные элементы, которые появляются после сохранения (но которые существовали в документе, который хранится в базе данных до сохранения.

Вот пример сохраненного документа:

{
  "_id": {
    "$binary": "qAvZU8AzqES1fv0OL9GaBw==",
    "$type": "03"
  },
  "title": "Url 1a",
  "mediatype": "url",
  "modifieddate": "Wed, 09 Nov 2011 11:56:57 GMT",
  "filename": "iphone.pdf",
  "contenttype": "application/pdf",
  "weburi": "ffff"
}

Обратите внимание, что элемент "filename" НЕ был в BsonDocument, который был сохранен, однако он остается на месте после сохранения, находясь в базе данных до сохранения.

Один странный аспект заключается в том, что он удаляет эти «призрачные» элементы после ВТОРОГО сохранения.

Может кто-нибудь пролить свет на это?

1 Ответ

0 голосов
/ 09 ноября 2011

Сохранить полностью заменяет существующий документ новым или вставляет новый документ, если существующий документ не найден.Поведение, которое вы описываете, не должно быть возможным.

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

Кроме того, я заметил, что вы используетеUUID в качестве значения _id.По историческим причинам разные драйверы использовали разные порядки байтов при сохранении UUID в базе данных (поэтому двоичные значения различны).В частности, оболочка mongo и драйвер C # не используют один и тот же порядок байтов, поэтому вы можете не просматривать одни и те же документы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...