Mongo 3.2 Java驱动程序 - Find&计算操作

时间:2016-09-19 05:51:32

标签: java mongodb find

我有一个包含大量带整数数组的文档的集合。我试图找出集合中的任何位置是否存在设置/数字。在shell中它工作正常:

> db.col.find({ settings: { $elemMatch: { $eq : 310403 } } }).count()
1
> db.col.find({ settings: { $elemMatch: { $eq : 310403 } } },{_id:1})
{ "_id" : 897 }
> db.albums.find({ images: { $elemMatch: { $eq : 310404 } } }).count()
0

但我无法通过Java驱动程序使其工作。但我无法弄清楚如何判断发现是否真的找到了什么。

FindIterable<Document> checkForSetting;
for (int i = 0; i < 1000000; i++) {
                checkForSetting  = col.find(new Document("settings",new Document("$eleMatch",new Document("$eq",i)))).projection(new Document("_id",1));
                if ( null, empty, not found,etc) {
                    ...do something
                }
}

我觉得我在某种程度上使它变得比它应该更难。在shell中,它是一个明智的选择。我真的很讨厌必须遍历每个集合的文档来检查数组中是否存在数字,但是我已经花费了更多的时间来寻找“有效”的方式,而不是蛮力地使用它。

1 个答案:

答案 0 :(得分:1)

基本上,您有两种不同的情况:

(a)迭代收集,并为每一些结果做好准备。这是您使用find和您在问题中声明的FindIterable的地方。

(b)获取计数,这与shell示例中的计数完全相同:

 col.count(<whateverfilter>)

顺便说一句:您应该真正了解实用程序类过滤器和预测。您的代码使用旧的和丑陋的样式,使用3.x系列的java驱动程序不再需要它。