假设我的每个文件都采用以下格式
{"_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的字段?
先谢谢
答案 0 :(得分:0)
您可以尝试以下内容。它没有效率,因为集合中的所有内容都将被分组。
db.yourcollection.aggregate([{"$group":{"_id":"$numberOfOccurances","words":{"$push":"$WordName"}}},{"$sort":{"_id":1}},{"$limit":1}])
输出:
{ "_id" : 1, "words" : [ "foo", "abc", "pen" ] }