MongoDB驱动程序C#试图做基本的数学运算,但不理解聚合

本文关键字:运算 不理解 驱动程序 MongoDB | 更新日期: 2023-09-27 18:30:40

我有一个BsonDocuments的集合,每个文档都有一个名为"engagement"的字段(这是一个数字)和一个名为"color"的字段。我想要所有"颜色"="蓝色"的BsonDocuments的总成本。

到目前为止,我发现我需要做这样的事情:

            var collection = db.GetCollection<BsonDocument>("collectionName");
            var match = new BsonDocument
            {
                {
                    "$match",
                    new BsonDocument
                        {
                            {"sentiment", "positive"}
                        }
                }
            };
            var group = new BsonDocument
            {
                { "$group",
                    new BsonDocument
                        {
                            {
                                "Sum", new BsonDocument
                                             {
                                                 {
                                                     "$sum", "$engagement"
                                                 }
                                             }
                            }
                        }
              }
            };
            var pipeline = new[] { match, group };
            var result = collection.Aggregate(pipeline);

我一直收到有关无法从用法推断出聚合方法的类型方法参数的错误。

简而言之,我想知道如何使用聚合框架执行简单的数学运算。在此示例中,我尝试对集合中所有 BsonDocuments 的参与字段的所有值求和。如果可能的话,生成器函数的利用率会很好,但手动创建的 BsonDocument 也可以使用。

感谢您抽出宝贵时间

MongoDB驱动程序C#试图做基本的数学运算,但不理解聚合

使用 $group 时,您需要告诉聚合框架要按哪些字段进行分组。您可以在组对象的_id字段中执行此操作。此外,如果您想要一个简单的文档计数,则需要使用 { $sum : 1 } 对每个文档进行计数。如果使用字段名称,则告诉聚合将该字段的值解释为数字并将它们相加。

在MongoDB shell语法中:

{ $group: {
     _id: "$engagement",
     Sum: { $sum: 1 }
}}

翻译成 C#(未经测试!

{ "$group", new BsonDocument 
    { 
        { "_id", "$engagement" }, 
        { "Sum", new BsonDocument 
            { 
                { 
                    "$sum", 1 
                } 
             } 
        } 
    } 
}