0

这是我的代码片段:

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 类中未定义的字段保持原样?

4

1 回答 1

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 文档中的未知字段不会被清除。我相信这是因为查询对象中的非强类型样式不会强制按名称匹配。

谢谢,希望这对遇到同样问题的其他人有所帮助。

于 2013-05-10T18:25:11.693 回答