5
嵌入文檔如果我有一個公司集合包含嵌入式部門:更新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"
}
]
}
什麼是使用official 10gen C# driver時保存/更新整個事業部的最佳方式? (最新的0.9版本)
我正在使用Update.AddToSetWrapped添加Divisions,並且工作正常,但我也想能夠根據他們的_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>("Company")
.Update(query, update, UpdateFlags.Upsert, SafeMode.True);
}
,並調用它像這樣:
var division = GetDivisionById(1);
division.Name = "New Name";
UpdateDivision(division);
然後司的新實例將被添加到組,因爲雖然「_id」仍然是1,名稱不同,因此它是一個獨特的文檔。
那麼有什麼更新整個嵌入式文檔的好方法?
直到我想出了一個更好的解決方案我先去$pull
原來的司然後用$addToSet
跟改了司。這有效,但顯然不是理想的,因爲它執行兩個單獨的更新。