java - 如何使用聚合类将现有的 mongo db 查询转换为 Spring Boot

标签 java spring mongodb spring-boot

我编写了 mongodb 查询。我在使用聚合类在 Spring Boot 中转换它时遇到了一些问题。所以,请帮助我,我希望它使用聚合类在 Spring Boot 中转换它。

db.api_audit.aggregate([{

  $match: {
      merchant_id: '015994832961',
      request_time: {$gte: ISODate("2017-05-11T00:00:00.0Z"), 
          $lt: ISODate("2017-05-12T00:00:00.0Z")}}},
{  
   $group: 
    {
        _id: {
        SERVICE_NAME: "$service_name",

        STATUS: "$status"
    },
    count: {
        "$sum": 1
    }
}
}, {


 $group: {
    _id: "$_id.SERVICE_NAME",

    STATUSCOUNT: {
        $push: {
            Service_name: "$_id.STATUS",
            count: "$count"
        }
    }
}
 },
 { $sort : { "STATUSCOUNT.count" : -1} }
  ])

下面是数据库查询响应

{
"_id" : "sendOTP",
"STATUSCOUNT" : [ 
    {
        "status" : "SUCCESS",
        "count" : 2.0
    }
]
}

提前致谢。

最佳答案

首先创建所有必需的操作,然后将它们添加到聚合管道中。然后将其提供给 Autowiring 的 mongotemplate。

类似这样的事情:

@Autowired
private final MongoTemplate mongoTemplate;

void aggregate()
{

    Criteria match = where("merchant_id").is("015994832961").andOperator(where("request_time").gte(Date.parse("2017-05-11T00:00:00.0Z")).lt(Date.parse("2017-05-11T00:00:00.0Z")));
    GroupOperation groupOperation1 = group(fields().and("SERVICE_NAME").and("STATUS")).count().as("count");
    GroupOperation groupOperation2 = ...//(not sure how push works here, but it should not be hard to figure out)
    SortOperation sortOperation = sort(DESC, "STATUSCOUNT.count");

    Aggregation aggegation = Aggregation.newAggregation(match, groupOperation1, groupOperation2, sortOperation);

    List<Result> results = mongoTemplate.aggegate(aggregation, ObjectOfCollectionToRunOn.class, Result.class).getMappedResults();
}

关于java - 如何使用聚合类将现有的 mongo db 查询转换为 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44779598/

相关文章:

java - 添加 global-method-security 命名空间时,Spring 看不到 @Transactional

mysql - Spring Boot JPA 连接验证不起作用

mongodb - 从 MongoDB shell 获取当前脚本路径

javascript - 使用 Nodejs 将图片上传到 MongoDB 并表达

java - 将主键作为外键映射到另一个表

Java套接字使用wireshark获取数据包

java - Spring Boot 2 kerberos 身份验证

java - 如何打印数组中出现次数最多的 5 个数字?

java - 用于获取 session 室详细信息的 Outlook API,无论房间是否已预订

javascript - 从 MongoDB 文档返回单个字段