给定以下数据集:
类别 | 约会 | 数量 |
---|---|---|
水果 | 2023-01-01 | 1 |
水果 | 2023-01-02 | 2 |
肉 | 2023-01-03 | 3 |
坚果 | 2023-01-04 | 4 |
坚果 | 2023-01-05 | 5 |
坚果 | 2023-01-06 | 6 |
是否有可能在 Mongo JPA 中进行多组聚合以产生:
max(date)
类别 | 计数 | last_amount |
---|---|---|
水果 | 2 | 2 |
肉 | 1 | 3 |
坚果 | 3 | 6 |
这在具有一些 SQL 分组和可能的子查询的关系数据库中应该是可能的,但在 Mongo 中似乎很难实现。我可以在一次聚合中获得行数,但似乎我需要多次操作才能实现我的需要。
试试这个:
db.collection.aggregate([
{
"$addFields": {
"dateValue": {
"$toDate": "$date"
}
}
},
{
"$sort": {
dateValue: 1
}
},
{
"$group": {
"_id": "$category",
"count": {
"$sum": 1
},
"lastAmount": {
"$last": "$amount"
}
}
}
])
在此查询中,我们首先将字符串日期转换为日期对象。如果您的日期已存储为日期,则不需要此步骤。接下来,我们按日期升序对文档进行排序。最后,我们将它们按
category
分组,计算出count
和last_amount
.