文档如下:
{
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
的最小值和最大值
答案 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());
}