Reputation: 2025
The documents look like this:
{
Age: 20,
Gender: "Male",
SomeField: "ABC"
SomeParameter: 17.7
}
With C# mongodb driver, how do you write something like this?
SELECT Age, Gender, MIN(SomeParameter), MAX(SomeParameter)
FROM ...
WHERE SomeField = 'ABC'
GROUP BY Age, Gender
So that for each combination (group) of Gender
and Age
we'll get min & max of SomeParameter
Upvotes: 1
Views: 4465
Reputation: 2025
The key to this is in the "_id"
value construction:
IMongoCollection<BsonDocument> collection = GetYourCollectionHere();
// there are many ways to create a filter. Using Builders here.
var filter = Builders<BsonDocument>.Filter.Eq("SomeField", "ABC");
var groupby = new BsonDocument("_id", new BsonDocument {
{ "Gender", "$Gender" },
{ "Age", "$Age" }
})
.Add("Min", new BsonDocument("$min", "$SomeParameter"))
.Add("Max", new BsonDocument("$max", "$SomeParameter"));
var result = collection
.Aggregate()
.Match(filter)
.Group(groupby);
// to see the output
foreach (var doc in result)
{
Console.WriteLine(doc.ToJson());
}
Upvotes: 1