MongoDB C # Driver-忽略绑定字段

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

示例模型。

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 忽略与模型不匹配的字段?

55663 次浏览

是的。只需用 BsonIgnoreExtraElements属性装饰你的 UserModel类:

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

顾名思义,驱动程序会忽略任何额外的字段,而不会抛出异常。更多资料请浏览这里 -忽略额外的元素

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

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

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

您可以在这里阅读更多关于使用类映射忽略额外元素的内容 -忽略额外的元素

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

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

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

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