mongodb - 基于某些条件的MongoDB聚合分支计算?
问题描述
我有一系列值:
[{
"Reserviert": {
"Zeitstempel": "2018-06-06T18:19:42.317Z",
"Wert": 46
}
}, {
"Reserviert": {
"Zeitstempel": "2018-06-06T18:34:42.317Z",
"Wert": 48
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T14:52:32.472Z",
"Wert": 104
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T15:07:32.472Z",
"Wert": 102
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T14:52:32.472Z",
"Wert": 20
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T15:07:32.472Z",
"Wert": 24
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T14:52:32.472Z",
"Wert": 94
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T15:07:32.472Z",
"Wert": 90
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T14:52:32.473Z",
"Wert": 33
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T15:07:32.473Z",
"Wert": 29
}
}, {
"Reserviert": {
"Zeitstempel": "2018-07-09T14:52:32.473Z",
"Wert": 15
}
}]
现在,我想做一个计算:将所有存在的文档的所有“Wert”值相加。另一次,我想传递一个日期范围,然后只计算基于该日期范围的值的总和。我怎样才能做到这一点?mongoDB聚合中是否有类似“分支”的东西?因为如果我计算一件事,我就无法计算另一个分支,因为管道已经改变了我之前管道的输入......
我已经进行了基本的日期范围计算等,但不知道如何进入计算的先前“状态”,然后根据某些日期范围条件进行计算(在我计算出例如总和之后整个日期范围)
例如,我可以计算日期范围......然后总结日期范围内的所有产品......但我不能再回去计算产品的总和(也来自日期范围之外的产品)例如,如果我想计算它们之间的比率..
$project: {
ProdukteImZeitraum:
{
cond: { $and: [
{ $gte: ["Reserviert.Zeitstempel", new Date(req.params.start) ] },
{ $lte: ["Reserviert.Zeitstempel", new Date(req.params.end) ] }
]
}
}
}
}/*,
{
$group: {
_id: null,
res: {$addToSet: "$Reserviert.Wert"}
}
},
{
$addFields: {
AlleProdukteSumme: {
$sum: "$res"
}
}
}
解决方案
您可以使用$facet
管道阶段将管道分支为两个不同的计算 ( https://docs.mongodb.com/manual/reference/operator/aggregation/facet/ ):
[
$facet: {
totalSum: [
{ $group: { _id: null, totalSum: {$sum: '$Reserviert.Wert'}} }
],
dateRangeSum: [
{ $match: { 'Reserviert.Zeitstempel': {
$gte: new Date(req.params.start),
$lte: new Date(req.params.end)}
} },
{ $group: { _id: null, totalSum: {$sum: '$Reserviert.Wert'}} }
]
}
]
推荐阅读
- c - 将 SIGINT 发送到运行脚本的分叉 exec 进程不会杀死它
- visual-studio-code - 从 VS Code 部署时 LWC 部署错误
- database - 复制完成后如何将文档从一个数据库复制到另一个数据库并删除原始数据库上的文档
- codeigniter - 如何修复 CodeIgniter Base_url 和 css 链接
- python-3.x - 有没有办法用逗号分隔多个列
- javascript - select2 未显示数据库中预选的数据
- r - R Shiny ValueBox 和表格布局
- pvlib - 没有名为“pvlib.temperature”的模块
- parsing - rdf4j:解析 sparql 查询以更改三元组模式中的某些 uri
- java - 来自配置 yaml 的绑定映射