mongodb更新了许多嵌入式文档

时间:2013-08-13 05:50:04

标签: mongodb updates mongodb-.net-driver

伙计们,我使用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(实体)时,表示实体文档已存在于A集合中,执行A中的每个字段和B文件得到更新?我不知道驱动程序如何处理这种事情。假设有很多B对象,就说100个并没有修改过。正在进行什么过程?

1 个答案:

答案 0 :(得分: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);
      }
   }