【发布时间】: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