如何使用Mongodb中的聚合以及相应的java代码

时间:2017-08-23 22:51:21

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

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

{"_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);

如何在&#34; numberOfOccurences&#34;中获得所有具有最小价值的文件?使用java的字段?

先谢谢

1 个答案:

答案 0 :(得分:0)

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


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

输出:



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