在C#Mongodb Driver中,如何使用未知字段进行部分更新?

时间:2013-05-07 19:41:56

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

这是我的代码段:

var query = Query<MyData>.EQ(e => e.key, key);
var entity = collection.FindOne(query);

if (entity != null)
{
    entity.Value = "abc";
    // there are another 20 assignments here
    // ...
    collection.Save(entity);
}

如果集合中有其他未在MyData对象中定义的字段,则会清除这些字段。有没有办法离开MyData类中未定义的字段?

1 个答案:

答案 0 :(得分:0)

我明白了。指定查询对象时,请使用非强类型样式,如此

var query = Query.EQ("myID", obj.myID);

而不是

var query = Query.EQ<MyObject>("myID", obj.myID);

并在更新查询中指定要更新的字段,如此

var update = Update.SetWrapped("fieldName", obj.fieldName).SetWrapped(...)...SetWrapped(...);
collection.Update(query, update);

因此,更新的mongo doc中的未知字段不会被删除。我相信这是因为查询对象中的非强类型样式不强制按名称匹配。

谢谢,希望这对任何遇到同样问题的人都有帮助。