MongoDBとC#を使用してFindOne()を使用する場合、オブジェクトで見つからないフィールドを無視する方法はありますか?
EG、モデル例。
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
また、MongoDBコレクションにパスワードを保存しますが、上記のoutオブジェクトにパスワードをバインドしたくありません。 Getをそうすると、
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にモデルと一致しないフィールドを無視するように指示することはありますか?
はい。 UserModel
クラスをBsonIgnoreExtraElements
属性で装飾するだけです:
[BsonIgnoreExtraElements]
public class UserModel
{
public ObjectId id { get; set; }
public string Email { get; set; }
}
名前が示すように、ドライバーは例外をスローする代わりに余分なフィールドを無視します。詳細はこちら- 余分な要素を無視する 。
さらに別の可能な解決策は、このための規則を登録することです。
このように、すべてのクラスに[BsonIgnoreExtraElements]で注釈を付ける必要はありません。
Mongoクライアントを作成するときのどこかで、以下をセットアップします。
var pack = new ConventionPack();
pack.Add(new IgnoreExtraElementsConvention(true));
ConventionRegistry.Register("My Solution Conventions", pack, t => true);
はい。 (モデルクラスを編集する代わりに)別の方法は、RegisterClassMap
でSetIgnoreExtraElements
を使用することです。
あなたの場合、ドライバーを初期化するときにこのコードを追加するだけです:
BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
cm.AutoMap();
cm.SetIgnoreExtraElements(true);
});
クラスマッピングを使用して余分な要素を無視する方法について詳しくは、こちらを参照してください- 余分な要素を無視する 。