2015-09-20 17 views
9

Używam MongoDB 3.0. Załóżmy, że istnieje zbiór dokumentów wymienionych photos, jego struktura jestsposób wywoływania operacji liczenia po znalezieniu za pomocą sterownika mongodb java

{"_id" : 1, photographer: "jack"} 

z database.getCollection("photos"), MongoDB zwróci MongoCollection przedmiot, na który mam metodę count() aby uzyskać dokumenty numer zwrócone.

Jednak przy zapytaniach z określonymi warunkami. Na przykład znaleźć dokumenty o identyfikatorze mniejszej niż 100:

photosCollections.find(Document.parse("{_id : {$lt : 100}}")) 

Przede find metoda zawsze zwraca się kursor, który nie zapewnia count() funkcję. Jak mogę sprawdzić, ile dokumentów zostało zwróconych? Wiem, że na linii poleceń, można użyć

db.photos.find({_id : {$lt : 100}}).count() 

Oczywiście, mogę przejść przez iterator i policzyć liczbę dokumentów siebie. Jednak uważam to za naprawdę niezdarne. Zastanawiam się, czy sterownik java MongoDB udostępnia taką funkcję, aby policzyć liczbę dokumentów zwróconych przez metodę find()? Jeśli nie, jaka jest przyczyna tej decyzji?

Odpowiedz

1

Docs API jasno stwierdzić, że DBCursor Object provides a count method:

MongoClient client = new MongoClient(MONGOHOST,MONGOPORT); 
DBCollection coll = client.getDB(DBNAME).getCollection(COLLECTION); 

DBObject query = new Querybuilder().start() 
        .put("_id").lessThan(100).get(); 

DBCursor result = coll.find(query); 

System.out.println("Number of pictures found: " + result.count()); 
+0

Tak, metody zliczania() był w MongoDB 2.0, ale usunięto MongoDB 3.0. Nie wiem, jaki jest powód ...... –

+0

@EnsomHodder http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/ Uwaga na 3.0 w adresie URL . Testowane, działa. –

+0

Querybuilder nie istnieje – PedroD

3

miałem podobny problem. Używam MongoCollection zamiast DBCollection, ponieważ jest to funkcja używana w przewodniku MongoDG 3.2. MongoCollection nie ma metody count(), więc myślę, że jedyną opcją jest użycie iteratora, aby je policzyć.

W moim przypadku wystarczyło wiedzieć, czy jakikolwiek dokument został zwrócony, używam to:

if(result.first() != null) 
1
Bson bson = Filters.eq("type", "work"); 
List<Document> list = collection.find(bson).into(new ArrayList<>()); 
System.out.println(list.size()); 

do (A) (A Collection Typ) Metoda iteracje nad wszystkimi dokumentami i dodaje każdy do danego celu. Wtedy możemy uzyskać liczbę zwróconych dokumentów.

6

Jak powiedział MongoCollection ma metodę count() że zwróci liczbę dokumentów w kolekcji, ale ma też count(Bson filter) że zwróci liczbę dokumentów w zbiorach według podanych opcji.

Więc może po prostu użyć:

long count = photosCollections.count(Document.parse("{_id : {$lt : 100}}")) 

czy może jaśniej:

Document query = new Document("_id", new Document("$lt", 100)); 
long count = photosCollections.count(query); 

ref: http://api.mongodb.com/java/3.3/com/mongodb/client/MongoCollection.html#count-org.bson.conversions.Bson-

1

W MongoDB 3.4 można używać tylko iteratorem FindIterable aby uzyskać zliczania dokumentów zwróconych przez filtr. na przykład

`FindIterable findIterable = 
mongoCollection.find(Filters.eq("EVENT_TYPE", "Sport")); 
    Iterator iterator = findIterable.iterator(); 
    int count = 0; 
    while (iterator.hasNext()) { 
     iterator.next(); 
     count++; 
    } 
    System.out.println(">>>>> count = " + count); 

`