【问题标题】:Unable to get max _id value in MongoDB Aggregation using Java code无法使用 Java 代码在 MongoDB 聚合中获取最大 _id 值
【发布时间】:2019-12-23 13:46:45
【问题描述】:

声明:我正在尝试获取数据集的最大 _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());}

【问题讨论】:

    标签: java mongodb aggregation


    【解决方案1】:

    问题:您正在对_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());
    }
    

    【讨论】:

    • 谢谢 S Sharma 先生。你的建议没有用,但我很感激。请找到mongo shell命令,id列上的组没有问题, db.getCollection("Emp").aggregate([ { $match: { Dept : { $eq: "IT"} } }, {$group :{_id : "$oid", max_id : {$max : "$_id"}}} ])
    • 您能否用一些示例数据和预期输出更新您的问题?
    • 1.预期输出:“_id”:“5d5818240285461e54bedcf8”2.示例数据:`` {“_id”:ObjectId(“5d4d9059f0b31921a4916a0c”),“EmpID”:“1001”,“EmpName”:“John”,“Sal”: 30000.0, "DOB" : ISODate("1989-06-09T18:30:00.000+0000"), "Age" : 31.0, "Dept" : "IT" } // ----------- ---------------------------------- { "_id" : ObjectId("5d5818240285461e54bedcf8"), "EmpID" :“1005”,“EmpName”:“Henry”,“Sal”:35000.0,“DOB”:ISODate(“1995-02-09T18:30:00.000+0000”),“年龄”:21.0,“部门”: “它”}```
    【解决方案2】:

    谢谢你,我找到了答案,

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

    代码:

    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());
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多