MongoDB C# Driver - Ignore fields on binding

LiamB picture LiamB · May 3, 2014 · Viewed 39.4k times · Source

When using a FindOne() using MongoDB and C#, is there a way to ignore fields not found in the object?

EG, example model.

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

Now we also store a password in the MongoDB collection, but do not want to bind it to out object above. When we do a Get like so,

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

We get the following error

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

Is there anyway to tell Mongo to ignore fields it cant match with the models?

Answer

i3arnon picture i3arnon · May 3, 2014

Yes. Just decorate your UserModel class with the BsonIgnoreExtraElements attribute:

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

As the name suggests, the driver would ignore any extra fields instead of throwing an exception. More information here - Ignoring Extra Elements.