2015-09-20 6 views
9

के साथ मिलने के बाद गिनती ऑपरेशन को कॉल करने के लिए मैं MongoDB 3.0 का उपयोग कर रहा हूं। लगता है photos नामित दस्तावेजों का एक सेट है, इसकी संरचनाmongodb जावा ड्राइवर

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

database.getCollection("photos") साथ, MongoDB एक MongoCollection वस्तु है, जो पर मैं विधि count() संख्या दस्तावेजों लौटे प्राप्त करने के लिए वापस आ जाएगी है।

हालांकि, जब मैं विशिष्ट स्थितियों के साथ प्रश्न पूछता हूं। उदाहरण के लिए आईडी 100 की तुलना में छोटे वाले दस्तावेज़ ढूंढने:

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

ऊपर find विधि हमेशा एक कर्सर जो एक count() समारोह प्रदान नहीं करता है वापस आ जाएगी। तो मैं कैसे जान सकता हूं कि कितने दस्तावेज़ लौटे? मैं कमांड लाइन पर पता है, मैं

db.photos.find({_id : {$lt : 100}}).count() 
बेशक

उपयोग कर सकते हैं, मैं iterator के माध्यम से जाने के लिए और अपने आप को दस्तावेजों की संख्या की गणना कर सकते हैं। हालांकि मुझे यह वास्तव में बेकार लगता है। मुझे आश्चर्य है कि क्या मोंगोडीबी जावा ड्राइवर find() विधि द्वारा लौटाए गए दस्तावेजों की संख्या को गिनने के लिए ऐसी कार्यक्षमता प्रदान करता है? यदि नहीं, तो निर्णय के पीछे क्या कारण है?

उत्तर

1

एपीआई डॉक्स स्पष्ट रूप से राज्य है कि 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

हाँ, गिनती() विधि MongoDB 2.0 में प्रदान की गई थी, लेकिन MongoDB 3.0 में हटा दिया गया था। मुझे नहीं पता कि क्या कारण है ...... –

+0

@EnsomHodder http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/ यूआरएल में 3.0 नोट करें । परीक्षण, काम करता है। –

+0

क्वेरीबिल्डर मौजूद नहीं है – PedroD

3

मैं एक ऐसी ही समस्या थी। मैं डीबीसीओलेक्शन के बजाय मोंगोकोलेक्शन का उपयोग कर रहा हूं, क्योंकि इसका उपयोग मोंगोडीजी 3.2 गाइड में किया जाता है। MongoCollection को गिनती() विधि नहीं मिली है, इसलिए मुझे लगता है कि एकमात्र विकल्प इटरेटर को गिनने के लिए उपयोग करना है।

मेरे मामले में मैं केवल यह जानना चाहते हैं किसी भी दस्तावेज़ लौटा दिया गया है की जरूरत है, मैं इस का उपयोग कर रहा:

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()); 

में (ए) सभी दस्तावेजों से अधिक विधि दोहराता (एक संग्रह प्रकार है) और दिए गए लक्ष्य में प्रत्येक को जोड़ता है। फिर हम लौटे दस्तावेजों की गिनती प्राप्त कर सकते हैं।

6

जैसा कि आपने कहा MongoCollection count() विधि है कि संग्रह में दस्तावेजों की संख्या वापस आ जाएगी है, लेकिन यह भी एक count(Bson filter) कि संग्रह में दस्तावेजों की संख्या वापस आ जाएगी दिए गए विकल्पों में के अनुसार है।

तो आप बस का उपयोग कर सकते हैं:

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

या हो सकता है साफ:

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

रेफरी: http://api.mongodb.com/java/3.3/com/mongodb/client/MongoCollection.html#count-org.bson.conversions.Bson-

1

MongoDB 3.4 में आप केवल FindIterable की इटरेटर संख्या प्राप्त करने के लिए उपयोग कर सकते हैं एक फ़िल्टर द्वारा लौटा दस्तावेजों का। जैसे

`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); 

`

संबंधित मुद्दे