0

伙计们,我使用 mongodb 的官方 CSharp 驱动程序,我得到了这两个类:

public class A
{
    public A()
    {
        Bs = new List<B>();
    }

    [BsonId]
    public string Id { get; set; }
    public string Name { get; set; }
    public IList<B> Bs { get; set; }
}

public class B
{
    public string Name { get; set; }
}

在 db 中,B 嵌入在 A 文档中,实体是 A 的对象,然后像这样执行保存工作:

collection.Save<A>(entity);

Save 方法将根据 Id 执行插入或更新,我的问题是:当我第二次执行 collection.Save(entity) 时,这意味着实体文档已经存在于 A 集合中,是否 A 和 B 文档中的每个字段更新了吗?我不知道驱动程序如何处理这种事情。假设有很多 B 对象,比如说 100 个并且没有修改。什么过程?

4

1 回答 1

1

当您调用 时Save,根据您的[BsonId]现场驱动程序决定如何处理此文档:

  • 如果Id集合中不存在带有的文档,它将是insert该文档
  • 如果Id集合中存在文档,它将是update该文档(基于您的Id)。更新意味着它将用您的新字段替换所有字段entity

以下是伪代码中方法如何工作的示例save(与 C# 驱动程序中的相同):

   function save( doc ) {
      if( doc["_id"] ) {
         update( {_id: doc["_id"] }, doc, { upsert: true } );
      }
      else {
         insert(doc);
      }
   }
于 2013-08-13T08:21:06.407 回答