Using SetFields with MongoDB C# driver 2.0 Using SetFields with MongoDB C# driver 2.0 mongodb mongodb

Using SetFields with MongoDB C# driver 2.0


You need to use the Projection method on IFindFluent (which is what Find and Projection return):

var findFluent = Collection.Find(query).Projection(Fields<MealPlan>.Exclude (plan => plan.Meals))

Now, this would eventually generate a cursor of BsonDocuments since it doesn't know how the projection looks. You can call the generic Projection instead to add that type:

var findFluent = Collection.Find(query).Projection<MealPlan>(Fields<MealPlan>.Exclude (plan => plan.Meals))

In a more general sense (which is less relevant when using Exclude), you could also specify fields using a lambda expression:

var findFluent = Collection.Find(query).Projection(plan => plan.Meals)


If you want SetFields back you can write your own extension method:

 public static class MongoExtensions{    public static IFindFluent<T, T> SetFields<T>(this IFindFluent<T, T> query, params string[] fields)    {        if ( fields == null || fields.Length == 0 )        {            return query;        }        var project = Builders<T>.Projection.IncludeAll<T>(fields);        return query.Project<T>(project);    }    public static ProjectionDefinition<T> IncludeAll<T>(this ProjectionDefinitionBuilder<T> projection,        params string[] fields)    {        ProjectionDefinition<T> project = null;        foreach (string columnName in fields)        {            if (project == null)            {                project = Builders<T>.Projection.Include(columnName);            }            else            {                project = project.Include(columnName);            }        }        return project;    }}