Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
B文档基础数学(求和)MongoDB.驱动程序C#_C#_Asp.net_Mongodb_Mongodb Query_Bson - Fatal编程技术网

B文档基础数学(求和)MongoDB.驱动程序C#

B文档基础数学(求和)MongoDB.驱动程序C#,c#,asp.net,mongodb,mongodb-query,bson,C#,Asp.net,Mongodb,Mongodb Query,Bson,我有一个BsonDocuments集合,如下所示: { "_id" : ObjectId("5699715218a323101c663b9a"), "amount" : 24.32, "color" : false } 我想对这个特定集合中的所有“amount”值求和(~1000 BsonDocuments) 这就是我到目前为止所做的: var group = new BsonDocument{ {

我有一个BsonDocuments集合,如下所示:

{
        "_id" : ObjectId("5699715218a323101c663b9a"),
        "amount" : 24.32,
        "color" : false
}
我想对这个特定集合中的所有“amount”值求和(~1000 BsonDocuments)

这就是我到目前为止所做的:

var group = new BsonDocument{
                        { "$group", new BsonDocument
                            {
                                { "_id", "$amount" },                       
                            }
                        }
                    };

var pipeline = new[] { group };
var result = collection.Aggregate(pipeline);`
声明变量“result”的最后一行给了我一个错误:“无法从用法推断方法聚合的类型参数。”我真的觉得这个错误来自于我如何设置“group”BsonDocument,但实际上我甚至不确定这是否是我应该走的方向。感谢您的帮助

谢谢你抽出时间

[编辑]马克西米利亚诺斯·里奥斯的答案奏效了。此外,如果要清点已处理的文件,可按以下方式进行:

var aggregation = collection.Aggregate<BsonDocument>()
        .Group(new BsonDocument
                    {
                        { "_id", BsonNull.Value
                        },
                        {
                            "total_amount", new BsonDocument
                                         {
                                             {
                                                 "$sum", "$amount"
                                             }
                                         }
                        },
                        {
                            "sum", new BsonDocument
                                         {
                                             {
                                                 "$sum", 1
                                             }
                                         }
                        }

                    });

   var doc = aggregation.Single();
   BsonDocument result = doc.AsBsonDocument;
   var total = result["total_amount"].AsDouble;
   var count = result["sum"].AsInt32;
var aggregation=collection.Aggregate()
.组(新的B文档)
{
{u id',BsonNull.Value
},
{
“总金额”,新的B文件
{
{
“$sum”、“$amount”
}
}
},
{
“sum”,新的B文件
{
{
“$sum”,1
}
}
}
});
var doc=aggregation.Single();
BsonDocument result=doc.AsBsonDocument;
var total=结果[“总金额”]。为双倍;
变量计数=结果[“总和”]。AsInt32;

首先,根据您的问题,您要做的是:

db.coll.aggregate([ { $group: { _id:null, total_amount:{"$sum":"$amount"}} } ])
引用你的话

我想在这个特殊的例子中对“amount”的所有值求和 收藏

解决方案是使用聚合框架的group方法,如下所示:

var aggregation = collection.Aggregate<BsonDocument>()
            .Group(new BsonDocument 
                        { 
                            { "_id", BsonNull.Value
                            }, 
                            { 
                                "total_amount", new BsonDocument 
                                             { 
                                                 { 
                                                     "$sum", "$amount" 
                                                 } 
                                             } 
                            } 
                        });

            var doc = aggregation.Single();
            BsonDocument result = doc.AsBsonDocument;
            var total = result["total_amount"].AsDouble;

这工作绝对完美。如果我想在仅使用“$sum”计算文档的总金额旁边添加一个新字段“document_amount”,1我将如何插入该字段?非常感谢你要清点这些文件吗?您可以不使用新字段进行计数。我将在MongoDb query.db.sumtable.aggregate([{$group:{{{U id:null,total{U amount:{“$sum”:“$amount”},total{$sum:1}}})下面写一些东西。谢谢你的帮助,马西米兰。它完全按照它应该的那样工作!
var doc = aggregation.SingleAsync();