我希望更新文档中不同级别的各个字段,并通过一次调用应用所有更改。理想情况下,驱动程序将使用models.Save(模型)遍历对象模型并识别更改,但这似乎对图中深度为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)));
答案 0 :(得分:1)
您可以遍历并在当前mongodb中进行更新的深度水平有限制。
考虑一下这篇博客文章的例子:
Post{
comments{
replies{
voters:["bob","steve"]
}
}
}
即使使用$运算符,也无法更新选举数组,因为它超过2级。 解决方案是为注释创建单独的集合。我指的是v 1.8
希望这有帮助。