MongoDB C # Driver-Ignorar campos en el enlace


Cuando se usa un findOne() usando MongoDB y C#, ¿hay una manera de ignorar los campos que no se encuentran en el objeto?

POR ejemplo, modelo de ejemplo.

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

Ahora también almacenamos una contraseña en la colección MongoDB, pero no queremos vincularla al objeto anterior. Cuando hacemos un Get like so,

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

Obtenemos el siguiente error

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

¿Hay alguna manera de decirle a Mongo que ignore los campos que no pueden coincidir con los modelos?

Author: Aviram Fireberger, 2014-05-03

3 answers

Sí. Simplemente decora tu clase UserModel con el BsonIgnoreExtraElements atributo:

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

Como su nombre indica, el controlador ignoraría cualquier campo adicional en lugar de lanzar una excepción.

 73
Author: i3arnon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-03 19:39:43

Otra posible solución, es registrar una convención para esto.

De Esta manera, no tenemos que anotar todas las clases con [BsonIgnoreExtraElements].

En algún lugar al crear el cliente mongo, configure lo siguiente:

        var pack = new ConventionPack();
        pack.Add(new IgnoreExtraElementsConvention(true));
        ConventionRegistry.Register("My Solution Conventions", pack, t => true);
 13
Author: Vetras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 15:11:37

Sí. Otra forma (en lugar de editar su clase modelo) es usar "Registrar Mapa de clase " con "SetIgnoreExtraElements "

En su caso, simplemente agregue este código cuando inicialice su controlador:

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

Puede leer más sobre la asignación de clases Mongo en:

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

 12
Author: Aviram Fireberger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-28 15:17:39