使用官方C#驱动程序更新MongoDB中的嵌入式文档
如果我有一个包含嵌入式部门的公司集合:使用官方C#驱动程序更新MongoDB中的嵌入式文档,c#,.net,mongodb,mongodb-.net-driver,C#,.net,Mongodb,Mongodb .net Driver,如果我有一个包含嵌入式部门的公司集合: { "_id": 1 "_t": "Company", "Name": "Test Company" "Divisions": [ { "_id": 1 "_t": "Division", "Name": "Test Division 1" }, { "_id": 2 "_t": "Division", "N
{
"_id": 1
"_t": "Company",
"Name": "Test Company"
"Divisions": [
{
"_id": 1
"_t": "Division",
"Name": "Test Division 1"
},
{
"_id": 2
"_t": "Division",
"Name": "Test Division 2"
}
]
}
使用时保存/更新整个部门的最佳方法是什么?(最新的0.9版本。)
我正在使用Update.addtosetrapped添加分区,这很好,但我也希望能够根据文档的_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);
}
然后将向集合中添加一个新的Division实例,因为尽管“_id”仍然是1,但名称不同,因此它是一个唯一的文档
那么,有什么好方法可以更新整个嵌入式文档呢
在我找到更好的解决方案之前,我将首先
$pull
原始分区,然后$addToSet
修改分区。这是可行的,但显然并不理想,因为它执行了两次单独的更新。您可以使用MongoDB的位置数组修改功能一次更新数组中的整个分区,如下所示:
var division = GetDivisionById(1);
division.Name = "New Name";
// change any other properties of division you want
collection.Update(
Query.EQ("Divisions._id", 1),
Update.Set("Divisions.$", BsonDocumentWrapper.Create<IDivision>(division))
);
var division=GetDivisionById(1);
分部名称=“新名称”;
//更改所需除法的任何其他属性
收藏。更新(
Query.EQ(“部门编号”,1),
Update.Set(“Divisions.$”,BsonDocumentWrapper.Create(division))
);
这里的关键是:
var division = GetDivisionById(1);
division.Name = "New Name";
// change any other properties of division you want
collection.Update(
Query.EQ("Divisions._id", 1),
Update.Set("Divisions.$", BsonDocumentWrapper.Create<IDivision>(division))
);