我正在try 使用Spring-data-mongo使用TopN聚合操作符实现分组,但我不知道如何实现.

我知道我想从MongoDB的POV中得到什么.大概是这样的:

[ { 
    $match: { 
      field000: { $regex: ".*MATCHTHIS.*" }, 
      created: { $lte: new Date("2030-05-25T00:00:00.000+00:00" ) } 
    }, 
  }, 
  { 
     $group: { 
       _id: "$field001", 
       field001s: { 
         $topN: { 
           output: ["$field002", "$created"], 
           sortBy: { created: -1, }, 
           n: 1, 
         }
       }
     }
    }]

意思是...对于已经由$Match子句过滤的文档集;GROUP BY field001,按照创建的Desc对每个存储桶进行排序,并 Select 顶部(1).因此,最近 for each 组类别创建的文档.

我发现将其转换为Spring-data-mongo有问题

推荐答案

经过大量研究,我意识到这个问题在Spring-Data-MongoDB的最新版本上可能很容易解决,因为实现了"topN"聚合运算符.然而,在我的例子中,升级堆栈以支持该版本不是一种 Select .

另一方面,如果您使用的是存储库,那么@Charchit Kapoor解决方案可能是最好的.

如果您想坚持使用mongo模板,可以这样做:

    AggregateIterable<Document> result = mongoOps.getCollection(COLLECTION_NAME).aggregate(Arrays.asList(new Document("$match",
        new Document("field000",
          new Document("$regex", ".*REGEXP_FIELD_000.*"))
          .append("created",
            new Document("$lte",
              new java.util.Date(1685318400000L)))),
      new Document("$group",
        new Document("_id", "$field001")
          .append("Field0001s",
            new Document("$topN",
              new Document("output", Arrays.asList("$field002", "$created"))
                .append("sortBy",
                  new Document("created", -1L))
                .append("n", 1L))))));

您可以将其分成不同的方法,以获得更好的可读性.

Mongodb相关问答推荐

MongoDB通过查找具有多个数组的对象进行聚合

如何在MongoDB中使用Aggregation来计算两个键相同但字段不同的对象数组的总值,并将其合并为一个?

Mongo 将一个数组链接到另一个数组

Mongoose updateMany 以及 Where 和 orWhere?

定期自动轮换 MongoDb 集合

MongoDB 使用 pymongo 收集 500K 文档的写入速度很差

MongoDB聚合 - 用另一个数组过滤数组

mongoose中的 required是什么意思?

mongoose通过引用属性查找文档

MongoDB 文档操作是原子的和隔离的,但它们是否一致?

如何在 MongoDB 集合中查找与给定条件匹配的文档和单个子文档

无法将 $match 运算符用于带有 ObjectId 的 mongodb/mongoose 聚合

带有 jQ​​uery Ajax/JSON 前端的 MongoDB 或 CouchDB 中间件

带有部分字符串的mongoose文本搜索

将 MongoCursor from ->find() 转换为数组

在安装的 MongoDB homebrew 中设置 dbpath (Mac OS)

MongoDB:查询和检索嵌入式数组中的对象?

Mongodb - 如何在多个字段中查找字符串?

Mongo 条件为key doesn't exist?

如何从集合中删除除 MongoDB 中的文档之外的所有文档