首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按共享字段分组文档,同时按日期进行筛选

按共享字段分组文档,同时按日期进行筛选
EN

Stack Overflow用户
提问于 2022-06-04 03:50:08
回答 1查看 41关注 0票数 0

我有几个代表共享相同引用的事务的文档。然而,他们都可以有不同的日期。他们看起来就像这样:

代码语言:javascript
复制
_id: ObjectId('xxxxxx')
reference: ObjectId('aaaaaa1')
amount: X
createdAt:2022-05-25T21:25:08.243+00:00

我需要对我的聚合设置一个日期限制,所以我编写了一个$match阶段

代码语言:javascript
复制
$match: {
createdAt: {
    $gte: ISODate('2022-01-01T00:00:00.000Z')

问题是,一旦我尝试添加组阶段并将所有金额之和(我将在下面添加阶段),一些人可能会留下一个文档,如果附加到同一项购买的事务发生在选定的日期之后,而另一些则发生在之前。我也尝试用$sort阶段(createdAt:-1)来达到同样平淡的结果。

代码语言:javascript
复制
$group:{
_id: '$reference',
Total: {$sum:"$amount"}

我猜TL;DR:是否有可能从特定的日期开始对文档进行分组,同时确保每个共享引用字段的文档都与那些共享引用的文档进行分组,尽管它们之间存在时间差?提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-06-04 09:15:12

您需要首先使用$group阶段,获取maxCreatedAt,然后使用$match对其进行过滤。

代码语言:javascript
复制
{
  '$group': {
    '_id': '$reference', 
    'maxCreatedAt': {
      '$max': '$createdAt'
    }, 
    'total': {
      '$sum': '$amount'
    }
  }
}, {
  '$match': {
    'maxCreatedAt': {
      '$gte': ISODate('2022-01-01T00:00:00.000Z')
    }
  }
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72496913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档