春季启动查询以单独从子文档数组中的字段中获取最大值

Posted

技术标签:

【中文标题】春季启动查询以单独从子文档数组中的字段中获取最大值【英文标题】:spring boot query to get the maximum value alone from a field in an array of subdocument 【发布时间】:2021-10-31 16:39:40 【问题描述】:

   "_id":"1",
   "name":"Elon musk",
   "created_by":"alien",
   "versions":[
      
         "version":1,
         "active":true,
         "group":"ALL",
      ,
      
         "version":2,
         "active":false,
         "group":"ALL",
      
   ]
  

我需要一个返回 versions.version 最大值的查询,即 2

val query = Aggregation.newAggregation(
            Aggregation.group("version").max("versions.version").as("maximum"),
            project("maximum").and("version").previousOperation())

val groupResults = mongoTemplate.aggregate(query, test::class.java, sample::class.java)

for (results in groupResults)
    println(results.maximum)

我在上面尝试过,但它只返回 1 但我期待 2 还有一个我可以在@Query 中使用的查询 需要帮助!!!!

【问题讨论】:

【参考方案1】:

这只是返回最大版本值,您可以自定义项目以获取其他字段

Arrays.asList(new Document("$match", 
    new Document("name", "Elon musk")), 
    new Document("$unwind", 
    new Document("path", "$versions")), 
    new Document("$sort", 
    new Document("versions.version", -1L)), 
    new Document("$limit", 1L), 
    new Document("$project", 
    new Document("version", "$versions.version")
            .append("_id", 0L)))

【讨论】:

您好,感谢您的回复。我们可以在 Spring Boot 中使用它吗?只是想确认或有办法通过 Aggregation.newAggregation () 来做到这一点,就像我在上面所做的那样 没问题,感谢您的回复,这应该对我有所帮助!我会保存它

以上是关于春季启动查询以单独从子文档数组中的字段中获取最大值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据查询从子文档数组中更新子文档字段?

有没有办法从子数组中读取?

Elasticsearch:如何修改 nested 字段的值

Elasticsearch:如何修改 nested 字段的值

不能从子查询将行转换为列

ES搜索结果中各个字段介绍