【问题标题】:how to get all the documents having minimum values of a particular field using aggregation in Mongodb with corresponding java code如何使用Mongodb中的聚合和相应的java代码获取具有特定字段最小值的所有文档
【发布时间】:2017-08-23 22:51:20
【问题描述】:

假设我的每个文档都采用以下格式

{"_id" : ObjectId(""),"WordName":"foo","numberOfOccurances" :1}
{"_id" : ObjectId(""),"WordName":"bar","numberOfOccurances" :5}
{"_id" : ObjectId(""),"WordName":"abc","numberOfOccurances" :1}
{"_id" : ObjectId(""),"WordName":"pen","numberOfOccurances" :1}
{"_id" : ObjectId(""),"WordName":"box","numberOfOccurances" :5}

我需要在 "numberofoccurrences" 字段中获取所有具有最小值的文档。我的预期输出如下

{"_id" : ObjectId(""),"WordName":"foo","numberOfOccurances" :1}
{"_id" : ObjectId(""),"WordName":"abc","numberOfOccurances" :1}
{"_id" : ObjectId(""),"WordName":"pen","numberOfOccurances" :1}

我尝试了几种方法。下面是我的代码,它将排序,它只给出一个文档,在 "numberOfOccurences" 字段中具有最小值。

 Bson sort = sort(new Document("numberOfOccurances"
                + "", 1));
        Bson limit=new Document("$limit",1);
        AggregateIterable<Document> output 
    =collection.aggregate(asList(sort,limit)).allowDiskUse(true);

如何使用 java 获取“numberOfOccurences”字段中具有最小值的所有文档?

提前致谢

【问题讨论】:

  • 定义“最小”。如果numberOfOccurrences 的值是{6,9,10,4,6,6,8,14},你想要什么?问题不清楚。我认为你的意思是:在所有文档中找到numberOfOccurrences的最小值,然后返回numberOfOccurrences与该值匹配的所有文档。
  • 是的吉姆,我需要 numberOfOccurences 字段中具有最小值的所有文档。
  • 这是“两个”查询,别无他法。您基本上只进行一次查询以确定最小值,这实际上是$min 的简单用法。然后另一个常规查询仅匹配值与返回结果匹配的位置。 MongoDB 的下一个版本允许“不相关”$lookup,这将在单个聚合管道中启用这种类型的匹配。但它还不可用,如果没有最新的源代码构建,它甚至不是很实用。
  • 你能告诉我你所说的“两个”查询是什么意思吗?我尝试了几种方法。但我仍然卡在这里。
  • 感谢您的输入。Neil 可以告诉我如何在 java 中使用“min”和“match”聚合操作。我找不到任何示例。

标签: java mongodb aggregation-framework mongodb-java mongodb-java-3.3.0


【解决方案1】:

您可以尝试以下方法。它效率不高,因为集合中的所有内容都将被分组。


    db.yourcollection.aggregate([{"$group":{"_id":"$numberOfOccurances","words":{"$push":"$WordName"}}},{"$sort":{"_id":1}},{"$limit":1}])

输出:



    { "_id" : 1, "words" : [ "foo", "abc", "pen" ] }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多