我有几个代表共享相同引用的事务的文档。然而,他们都可以有不同的日期。他们看起来就像这样:
_id: ObjectId('xxxxxx')
reference: ObjectId('aaaaaa1')
amount: X
createdAt:2022-05-25T21:25:08.243+00:00我需要对我的聚合设置一个日期限制,所以我编写了一个$match阶段
$match: {
createdAt: {
$gte: ISODate('2022-01-01T00:00:00.000Z')问题是,一旦我尝试添加组阶段并将所有金额之和(我将在下面添加阶段),一些人可能会留下一个文档,如果附加到同一项购买的事务发生在选定的日期之后,而另一些则发生在之前。我也尝试用$sort阶段(createdAt:-1)来达到同样平淡的结果。
$group:{
_id: '$reference',
Total: {$sum:"$amount"}我猜TL;DR:是否有可能从特定的日期开始对文档进行分组,同时确保每个共享引用字段的文档都与那些共享引用的文档进行分组,尽管它们之间存在时间差?提前感谢!
发布于 2022-06-04 09:15:12
您需要首先使用$group阶段,获取maxCreatedAt,然后使用$match对其进行过滤。
{
'$group': {
'_id': '$reference',
'maxCreatedAt': {
'$max': '$createdAt'
},
'total': {
'$sum': '$amount'
}
}
}, {
'$match': {
'maxCreatedAt': {
'$gte': ISODate('2022-01-01T00:00:00.000Z')
}
}
}
}https://stackoverflow.com/questions/72496913
复制相似问题