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 BsonDocument
s 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; }}