如何使用官方C#驱动程序在MongoDB中使用嵌入式文档更新doc的多个更改

时间:2011-06-16 20:33:48

标签: c# .net mongodb mongodb-.net-driver

我希望更新文档中不同级别的各个字段,并通过一次调用应用所有更改。理想情况下,驱动程序将使用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)));

1 个答案:

答案 0 :(得分:1)

您可以遍历并在当前mongodb中进行更新的深度水平有限制。

考虑一下这篇博客文章的例子:

Post{
  comments{
    replies{
      voters:["bob","steve"]
    }
  }
}

即使使用$运算符,也无法更新选举数组,因为它超过2级。 解决方案是为注释创建单独的集合。我指的是v 1.8

希望这有帮助。