2012-06-05 9 views
7

मोंगो डीबी में एक प्रश्न करते समय, मुझे सभी मैचों की कुल गणना प्राप्त करने की आवश्यकता होती है, साथ ही दस्तावेजों को सीमित/पजे हुए सबसेट के रूप में भी।mongodb को दोहराने के बिना गिनती मिलती है

मैं दो प्रश्नों के साथ लक्ष्य प्राप्त कर सकता हूं, लेकिन मुझे नहीं लगता कि यह एक प्रश्न के साथ कैसे किया जाए। मुझे उम्मीद है कि एक मोंगो फीचर है जो कुछ अर्थों में, SQL_CALC_FOUND_ROWS के बराबर है, क्योंकि ऐसा लगता है कि क्वेरी को दो बार चलाने के लिए ओवरकिल की तरह लगता है। कोई भी मदद बहुत अच्छी रहेगी। धन्यवाद!

संपादित करें: ऊपर दिए गए जावा कोड यहां दिए गए हैं।

 DBCursor cursor = collection.find(searchQuery).limit(10); 
    System.out.println("total objects = " + cursor.count()); 

उत्तर

3

मुझे यकीन है कि आप कौन सी भाषा का उपयोग कर रहे नहीं कर रहा हूँ, लेकिन आप आमतौर पर कर्सर एक find क्वेरी का परिणाम है और फिर उसी कर्सर का उपयोग स्वयं दस्तावेज़ प्राप्त करने के लिए उस पर एक count विधि कॉल कर सकते हैं।

+0

आपकी मदद के लिए धन्यवाद, यह एक आकर्षण की तरह काम करता है। मैं जावा का उपयोग कर रहा हूं और कर्सर की गिनती विधि है। – adamSpline

+7

यह काफी सही नहीं है। प्रश्न पूछता है कि इसे एक * क्वेरी * के साथ कैसे किया जाए। 'कर्सर.count()' का उपयोग करना वास्तव में क्लाइंट ड्राइवर को दूसरी क्वेरी का प्रतिनिधित्व करता है, लेकिन दूसरी क्वेरी अभी भी निष्पादित की जाती है। – Raman

2

यह केवल दो बार क्वेरी चलाने के लिए ओवरकिल नहीं है, लेकिन असंगतता का जोखिम भी है। संग्रह दो प्रश्नों के बीच बदल सकता है, या प्रत्येक क्वेरी को एक प्रतिकृति सेट में एक अलग सहकर्मी को भेजा जा सकता है, जिसमें संग्रह के विभिन्न संस्करण हो सकते हैं।

कर्सर (मोंगोडीबी जावास्क्रिप्ट शैल में) पर गिनती() फ़ंक्शन वास्तव में एक और क्वेरी चलाता है, आप देख सकते हैं कि "कर्सर.count" टाइप करके (कोष्ठक के बिना), इसलिए यह दो प्रश्नों को चलाने से बेहतर नहीं है।

सी ++ ड्राइवर में, कर्सर में "गिनती" फ़ंक्शन भी नहीं है। "Itcount" है, लेकिन यह केवल कर्सर पर लूप करता है और सभी परिणामों को प्राप्त करता है, जो आप नहीं चाहते हैं (प्रदर्शन कारणों से)। जावा ड्राइवर में "इटकाउंट" भी है, और वहां प्रलेखन का कहना है कि इसका उपयोग केवल परीक्षण के लिए किया जाना चाहिए।

ऐसा लगता है कि "कुछ ढूंढें और कुल गणना प्राप्त करें" लगातार और कुशलता से करने का कोई तरीका नहीं है।

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