Как обновить несколько изменений в документе со встроенными документами в MongoDB, используя официальный драйвер C # - PullRequest
0 голосов
/ 17 июня 2011

Я хочу обновить различные поля на разных уровнях в глубине документа и применить все изменения одним вызовом. В идеале, драйвер должен пройти объектную модель с помощью моделей. Сохраните (модель) и определите изменения, но, похоже, это никак не повлияет на изменения, сделанные на 2 уровня в глубине графика.

Итак, я сейчас пытаюсь обновить весь документ с помощью этого подхода, и он не оказывает влияния. Любая идея о том, что будет правильный синтаксис?

var models = _database.GetCollection<Model>("Models");
var modelQuery = Query.EQ("_id", new ObjectId("4dfa2601dc1c791d40106a25"));
var model = models.FindOneAs<Model>(modelQuery);

// Apply various changes (including embedded docs)...
var dataRef = model.Objects.Find(Domain.Object.Reference);
dataRef.Set(Domain.Field.Reference.Name, "Some Ref Name");

models.Update(modelQuery, Update.Set("_id", BsonDocumentWrapper.Create(model)));

1 Ответ

1 голос
/ 06 июля 2011

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

Рассмотрите пример этого блога:

Post{
  comments{
    replies{
      voters:["bob","steve"]
    }
  }
}

Вы не можете обновить массив избирателейтак как он глубже 2-х уровней даже с оператором $.Решение состоит в том, чтобы создать отдельную коллекцию для комментариев.Я имею в виду v 1.8

Надеюсь, это поможет.

...