Если у меня есть коллекция компании, которая содержит встроенные подразделения :
{
"_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
с измененным разделом. Это работает, но явно не идеально, поскольку выполняет два отдельных обновления.