B文档基础数学(求和)MongoDB.驱动程序C#
我有一个BsonDocuments集合,如下所示: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{ {
{
"_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();