为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 Java 代码在 MongoDB 聚合中获取最大 _id 值

无法使用 Java 代码在 MongoDB 聚合中获取最大 _id 值

白猪掌柜的 2023-06-08 20:50:06
声明:我正在尝试获取数据集的最大 _id 值。问题:它返回所有 _id 值。MongoCollection<Document> coll = db.getCollection(collection);          AggregateIterable<Document> docs = coll.aggregate(Arrays.asList(Aggregates.match(Filters.eq("Dept", "IT")),Aggregates.group("$_id", Accumulators.max("_id", "$_id"))));for(Document doc : docs) {System.out.println(doc.toJson());}
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

问题:您正在分组并试图找到组中的_id最大值,这显然是每个组一个。_id相反,您需要从所有过滤的文档中找到最大值。


下面的代码可以得到我们预期的输出:


MongoCollection coll = db.getCollection(collection);


AggregateIterable docs = coll.aggregate(Arrays.asList(Aggregates.match(Filters.eq("Dept", "IT")),

        Aggregates.group(null, Accumulators.max("_id", "$_id"))));

for (Document doc : docs) {

    System.out.println(doc.toJson());

}


查看完整回答
反对 回复 2023-06-08
?
哔哔one

TA贡献1854条经验 获得超8个赞

解决方案:我们需要对非聚合字段进行分组。


代码:


MongoCollection<Document> coll = db.getCollection(collection);

        

AggregateIterable<Document> docs = coll.aggregate(

        Arrays.asList(

                Aggregates.match(Filters.eq("Dept", "IT")),

                Aggregates.group("EmpId", Accumulators.max("id", "$_id"))

                )                   

        );


for(Document doc : docs) {

    System.out.println(doc.toJson());

}


查看完整回答
反对 回复 2023-06-08
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

例如:您可以试试这个通过使用这个我从列中获取最大日期logDate并将其分组为 MachineNames(根据我的要求)

MongoCollection<Document> collection  = databases.getCollection("Smx_22234_ShiftOEEDaily");

AggregateIterable<Document> maxLogDate = collection.aggregate(Arrays.asList(Aggregates.group("$machineName", Accumulators.max("maxlogdate", "$logDate"))));



查看完整回答
反对 回复 2023-06-08
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信