Mongodb C# - Как группировать по нескольким полям (агрегировать) - PullRequest
0 голосов
/ 09 июля 2020

Документы выглядят так:

{
  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

1 Ответ

0 голосов
/ 09 июля 2020

Ключ к этому - в конструкции значения "_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());
}
...