Dylan Hayes
Dylan Hayes

Reputation: 2366

Multi-field queries using C# driver for MongoDB

I'm having trouble figuring out syntax for what I'm trying to accomplish. As stated I'm using the C# driver for MongoDB.

I have a User entity defined as

[BsonIgnoreExtraElements]
public class User : MongoEntity
{
    [BsonElement]
    public string Username { get; set; }

    [BsonElement]
    public string Password { get; set; }

    [BsonElement]
    public string Email { get; set; }
}

I also have a UserService class that performs actions against the User collection in my mongo database. Below is an example of how i'm creating a real simple login example.

public UserPresentation Login(string username, string password)
{
    var entityQuery = Query<User>.EQ(e => e.Username, username.ToUpper());

    var entity = this.MongoConnectionHandler.MongoCollection.FindOne(entityQuery);

    return (entity != null && entity.Id.ToString().Length > 0 && entity.Password == password) ? new UserPresentation(entity) : null;
}

This works, however my question is... instead of creating a Query that only looks for Username == username, returning the element and then comparing the password in an if statement, can I somehow append more fields to the intial entityQuery object.

Upvotes: 8

Views: 13435

Answers (1)

davmos
davmos

Reputation: 9577

You can use Query.And() like this...

var entityQuery = Query.And(
                      Query<User>.EQ(e => e.Username, username.ToUpper()),
                      Query<User>.EQ(e => e.Password, password)
                  );

See CSharp Driver Tutorial

Or you could do it LINQ style, see: CSharp Driver LINQ Tutorial

This is also interesting too: How to rewrite a MongoDB C# LINQ with a Projection Requirement using a MongoCursor

Upvotes: 14

Related Questions