【问题标题】:MongoDB Driver C# trying to do basic math but don't understand aggregationMongoDB Driver C# 尝试做基本数学但不理解聚合
【发布时间】:2016-01-16 18:23:57
【问题描述】:

我有一个 BsonDocuments 集合,每个 BsonDocuments 都有一个名为“engagement”的字段(它是一个数字)和一个名为“color”的字段。我想要 "color" = "blue" 的所有 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 中的参与字段的所有值相加。如果可能的话,Builder 函数的使用会很好,但是手动创建的 BsonDocument 也可以使用。

感谢您的宝贵时间

【问题讨论】:

    标签: c# asp.net mongodb bson


    【解决方案1】:

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

    在 MongoDB shell 语法中:

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

    翻译成 C#(未经测试!):

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

    【讨论】:

    • 感谢您的回复,我现在更好地理解了聚合。我仍然收到有关无法从我声明结果的代码行中的用法推断聚合方法的类型方法参数的错误。知道这可能是什么吗?
    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    相关资源
    最近更新 更多