Mongodb C# - 如何按多个字段分组(聚合)

Mongodb C# - How to group by multiple fields ( Aggregate )

文档如下所示:

{
  Age: 20,
  Gender: "Male",
  SomeField: "ABC"
  SomeParameter: 17.7
}

用C#mongodb驱动,怎么写这样的东西?

SELECT Age, Gender, MIN(SomeParameter), MAX(SomeParameter)
FROM ...
WHERE SomeField = 'ABC'
GROUP BY Age, Gender

因此对于 GenderAge 的每个组合(组),我们将得到 SomeParameter

的最小值和最大值

关键在于 "_id" 值构造:

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());
}