我有一個帶有整數數組的文檔的集合。我試圖找到一個設置/數字是否存在於集合中的任何位置。在它的外殼工作正常:Mongo 3.2 Java驅動程序 - 查找和計算操作
> 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中,這是一件不容易的事情。我真的很討厭必須迭代每個集合的文檔來檢查數組中是否存在數字,但我已經花費更多時間試圖找到「有效」的方式,而不是蠻橫的方式。
您在Java代碼中使用'$ eleMatch'而不是'$ elemMatch'。這可能是問題嗎? 而對於性能,我會看看聚合方法,並將結果按id與後面的計數進行彙總。這可以通過一個請求來完成 – neomega
對不起,這是一個複製/粘貼錯誤。 – stackbacker