Mongodb C#-如何按多个字段分组(汇总)

时间:2020-07-09 12:48:59

标签: c# mongodb aggregation-framework mongodb-.net-driver

文档如下:

{
  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的最小值和最大值

1 个答案:

答案 0 :(得分:0)

关键在于"_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());
}