伙计们,我使用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个并没有修改过。正在进行什么过程?
答案 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);
}
}