MongoDB C# Pilote - Ignorer les champs sur la liaison

en utilisant FindOne () en utilisant MongoDB et C#, y a-t-il un moyen d'ignorer les champs qui ne se trouvent pas dans l'objet?

par exemple, de modèle par exemple.

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

maintenant nous stockons aussi un mot de passe dans la collection MongoDB, mais nous ne voulons pas le lier à l'objet ci-dessus. Quand nous faisons un Obtenir comme,

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

nous obtenons l'erreur suivante

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

y a-t-il quoi qu'il en soit pour dire à Mongo d'ignorer les champs qui ne correspondent pas aux modèles?

39
demandé sur Aviram Fireberger 2014-05-03 23:01:01

3 réponses

Oui. Simplement décorer votre UserModel la classe BsonIgnoreExtraElements l'attribut:

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

Comme son nom l'indique, le conducteur devra ignorer les champs supplémentaires au lieu de lancer une exception.

73
répondu i3arnon 2014-05-03 19:39:43

encore une autre solution possible, est d'enregistrer une convention pour cela.

de Cette façon, nous n'avons pas à annoter toutes les classes [BsonIgnoreExtraElements].

quelque part lors de la création de la mongo client, le programme d'installation suivantes:

        var pack = new ConventionPack();
        pack.Add(new IgnoreExtraElementsConvention(true));
        ConventionRegistry.Register("My Solution Conventions", pack, t => true);
13
répondu Vetras 2017-07-25 15:11:37

Oui. Une autre façon (au lieu de modifier le modèle de classe) est d'utiliser " Inscrire Le Plan De Classe" par " SetIgnoreExtraElements"

dans votre cas, ajoutez simplement ce code lorsque vous initialisez votre pilote:

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

Vous pouvez en savoir plus sur la cartographie de la classe Mongo dans:

http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/

12
répondu Aviram Fireberger 2017-06-28 15:17:39