如何解决具有整数值的所有字段的MongoDB总和
在聚合框架内,它在某些方面是可能的,对于下面这样的每个文档:
{
"Title": "Number orders","2021-03-16": 3,"2021-03-15": 6,"2021-03-19": 1,"2021-03-14": 19
}
获得这样的新文档?
{
"Title": "Number orders","2021-03-14": 19
"Total": 29
}
基本上,我想要一个新字段,它包含所有字段的整数值的总和。
另一件需要考虑的事情是日期字段是动态的,所以一周可能像示例中的那个,下周字段会变成这样
{
"Title": "Number orders","2021-03-23": 3,"2021-03-22": 6,"2021-03-26": 1,"2021-03-21": 19
}
谢谢!
解决方法
演示 - https://mongoplayground.net/p/724nerJUQtK
$$ROOT
是整个文档,使用 total
添加 $addFields
使用 $sum
将它们相加并使用 allData
删除 $unset
>
db.collection.aggregate([
{ $addFields: { allData: { "$objectToArray": "$$ROOT" } } } },{ $addFields: { "total": { $sum: "$allData.v" } } },{ $unset: "allData" }
])
,
根据您的older question,我认为这可能会有所帮助:
db.collection.aggregate([
{
$group: {
_id: {
dDate: "$deliveryDay",name: "$plate.name"
},v: { $sum: "$plate.quantity" }
}
},{
$group: {
_id: "$_id.name",Total: { $sum: "$v" },array: {
$push: { k: "$_id.dDate",v: "$v" }
}
}
},{
$addFields: {
array: {
$concatArrays: [
[{ k: "Title",v: "Number orders" }],"$array",[{ k: "Total",v: "$Total" }]
]
}
}
},{
$replaceRoot: {
newRoot: { $arrayToObject: "$array" }
}
}
])
输出:
/* 1 */
{
"Title" : "Number orders","2021-01-16" : 2,"Total" : 2
},/* 2 */
{
"Title" : "Number orders","2021-01-14" : 1,"2021-01-16" : 3,"Total" : 4
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。