MongoDB C#驱动程序 - 忽略绑定上的字段

时间:2014-05-03 19:01:01

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

使用MongoDB和C#使用FindOne()时,有没有办法忽略对象中找不到的字段?

EG,示例模型。

public class UserModel
{
    public ObjectId id { get; set; }
    public string Email { get; set; }
}

现在我们还在MongoDB集合中存储密码,但不想将其绑定到上面的out对象。当我们这样做时,

  var query = Query<UserModel>.EQ(e => e.Email, model.Email);
  var entity = usersCollection.FindOne(query);

我们收到以下错误

Element 'Password' does not match any field or property of class 

有没有告诉Mongo忽略它与模型不匹配的字段?

3 个答案:

答案 0 :(得分:102)

是。只需使用UserModel属性装饰BsonIgnoreExtraElements班级:

[BsonIgnoreExtraElements]
public class UserModel
{
    public ObjectId id { get; set; }
    public string Email { get; set; }
}

顾名思义,驱动程序会忽略任何额外的字段而不是抛出异常。更多信息 - Ignoring Extra Elements

答案 1 :(得分:21)

另一种可能的解决方案是为此注册一个约定。

这样,我们就不必使用 [BsonIgnoreExtraElements] 来注释所有类。

在创建mongo客户端时,请设置以下内容:

        var pack = new ConventionPack();
        pack.Add(new IgnoreExtraElementsConvention(true));
        ConventionRegistry.Register("My Solution Conventions", pack, t => true);

答案 2 :(得分:15)

是。另一种方法(而不是编辑模型类)是将RegisterClassMapSetIgnoreExtraElements一起使用。

在您的情况下,只需在初始化驱动程序时添加此代码:

BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
     cm.AutoMap();
     cm.SetIgnoreExtraElements(true);
});

您可以在此处阅读有关使用类映射忽略额外元素的更多信息 - Ignoring Extra Elements