我有一个值范围:
[{
"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”值相加。另外一次,我想传递一个Date范围,然后仅基于该日期范围计算值的总和。我怎样才能做到这一点? 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"
}
}
}
答案 0 :(得分:0)
您可以使用$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'}} }
]
}
]