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
因此对于 Gender
和 Age
的每个组合(组),我们将得到 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());
}
文档如下所示:
{
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
因此对于 Gender
和 Age
的每个组合(组),我们将得到 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());
}