Обновление встроенного документа в MongoDB с помощью официального драйвера C #

Если у меня есть коллекция компании, которая содержит встроенные подразделения :

{ 
  "_id": 1 
  "_t": "Company", 
  "Name": "Test Company" 
  "Divisions": [ 
    { 
       "_id": 1 
       "_t": "Division", 
       "Name": "Test Division 1" 
    }, 
    { 
       "_id": 2 
       "_t": "Division", 
       "Name": "Test Division 2" 
    } 
  ] 
} 

Как лучше всего сохранить / обновить весь раздел при использовании официального драйвера C # 10gen ? (Последний выпуск 0.9.)

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

Например, если Я определяю следующий метод обновления:

public void UpdateDivision(IDivision division) 
{ 
  var mongo = MongoServer.Create(_connectionString); 
  var database = mongo.GetDatabase(_databaseName); 
  var query = Query.EQ("_id", division.CompanyId); 
  var update = Update.AddToSetWrapped("Divisions", division); 
  database.GetCollection("Company") 
          .Update(query, update, UpdateFlags.Upsert, SafeMode.True); 
} 

и называю его так:

var division = GetDivisionById(1); 
division.Name = "New Name"; 
UpdateDivision(division);

Затем к набору будет добавлен новый экземпляр Division, потому что, хотя "_id" по-прежнему равен 1, имя другое, и, следовательно, это уникальный документ.

Итак, что есть хороший способ обновить весь встроенный документ?

Пока я не найду лучшее решение, я собираюсь сначала $ pull исходное подразделение, а затем $ addToSet с измененным разделом. Это работает, но явно не идеально, поскольку выполняет два отдельных обновления.

5
задан Martin Owen 7 December 2010 в 16:03
поделиться