当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Data MongoDB中进行这种聚合?

汝开畅
2023-03-14

我不习惯处理Spring数据,我正在尝试进行MongoDB聚合,但我无法解决项目和组部分,匹配部分非常容易:

db.collection.aggregate(
    { $match: { "car._id": "abc1234" } },
    {
        $project: {
            month: { $month: "$day" },
            year: { $year: "$day" },
            services: 1
        }
    },
    {
        $group: {
            _id: { month: "$month", year: "$year" },
            total: { $sum: "$services" }
        }
    }
)

day是日期类型字段。查询在mongo shell上运行良好,通过_id进行过滤,并通过所有服务的总和(Int字段)按年份和月份进行分组。但是我无法在Spring Data MongoDB上实现它。

我尝试使用aggregation.group(),但由于_id中的嵌套对象,我迷路了。

共有1个答案

南门茂才
2023-03-14

据我所知,您必须将所有内容封装在数组中,如下所示:

db.collection.aggregate([
{ $match: { "car._id": "abc1234" } },
{
    $project: {
        month: { $month: "$day" },
        year: { $year: "$day" },
        services: 1
    }
},
{
    $group: {
        _id: { month: "$month", year: "$year" },
        total: { $sum: "$services" }
    }
}])
 类似资料:
  • 我是MongoDB的新手! 有人能帮助我如何编写java代码来转换下面的mongo聚合查询吗?目前,我正在一个具有“spring-boot-starter-data-mongob”作为依赖项的Spring Boot应用程序中编写它。我正在考虑使用Mongo模板使用下面的查询获取分组文档。

  • 有人知道为什么repository方法没有按照预期工作吗?多谢了。

  • 我自己写了一个多进程下载网络大文件的程序:基本思路是多进程分块下载完后,再拼接文件。 这个url的大文件被分割成20个部分,开启了4个进程下载。 测试运行: python3 mpdown.py #速度比单进程快50%以上。 现在我有点不满意这个多进程下载,拼接文件(merge)是在全部下载完成后,再拼接,我想这个拼接动作也修改成多进程并行的,边下载边拼接。 由于下载是多进程的,各进程存在一定的竞争

  • TLDR中,我们向微服务发送请求(REST POST with body),模拟GCP存储,模拟下游api调用,这样整个微服务就可以重构了。此外,我们可以在测试中不做任何更改的情况下交换我们的平台/库,这使得我们非常敏捷。 我的第一个问题是DataFlow(apache beam)可以接收REST请求来触发作业吗?我看到很多api都围绕着“创建作业”,但我在文档中没有看到“执行作业”,而我看到了g

  • 我正试图弄清楚如何使用Spring Batch进行聚合。例如,我有一个带有姓名列表的CSV文件: 我想要文本文件中的姓名计数: 根据我从Spring Batch中学到的,ETL批处理过程(itemReader- Spring Batch是正确的工具吗?还是我应该用Spark?谢谢

  • 在https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html我们了解到: 以上代码显示了我们如何为t恤添加aggs,但我们如何做到: 和