2014-09-18 12 views
7

निम्न क्वेरी में सीमा से पहले गिनती पाने के लिए? मैं अभी भी कॉल को 5 दस्तावेजों की एक सरणी वापस करने के लिए चाहता हूं। अगर मैं $ समूह का उपयोग करता हूं तो ऐसा लगता है कि यह दस्तावेजों की सरणी को संरक्षित नहीं करेगा। क्या यह एक कॉल में किया जा सकता है, या मुझे दो कॉल करना है?कैसे मोंगो एकत्रीकरण पाइपलाइन

उत्तर

3

दुर्भाग्यवश, अभी आपको दो कॉल करना है, आपके परिणामों के लिए $ सीमा सीमा ऑपरेटर के साथ एक कॉल और गिनती के लिए दूसरी कॉल के बाद। आप $ सीमा ऑपरेटर के बिना समेकन ढांचे का उपयोग कर सकते हैं और एक गिनती की गणना करने के लिए $ समूह ऑपरेटर के साथ या wdberkeley बताते हैं कि आप एकीकरण फ्रेमवर्क का उपयोग करने के बजाय गिनती प्राप्त करने के लिए अपने मानदंड को .count() पर पास कर सकते हैं यदि आप उपयोग कर रहे हैं एक एकल मैच चरण।

MongoDB - Aggregation Framework (Total Count) देखें।

+1

परिणामों की कुल संख्या की गणना करने के लिए [.count()] (http://docs.mongodb.org/manual/reference/method/db.collection.count/) का उपयोग करें। कुल मिलाकर – wdberkeley

+0

@wdberkeley यह काम नहीं करता है। आपको दो कॉल करना होगा, जैसे ब्रैंटिनो ने कहा – 1nstinct

+0

सावधान रहें कि यदि आप '.count()' का उपयोग करते हैं, तो डुप्लिकेट परिणाम गिना जाएगा जो आपके कुल कॉल में $ समूह द्वारा समाप्त हो सकता है। – cib

-1

दूसरा विकल्प मोंगो क्वेरी के बजाय एप्लिकेशन परत पर परिणामों को सीमित करना है। फिर आप पूर्ण परिणाम की गिनती प्राप्त कर सकते हैं और आपको दो कॉल करने की आवश्यकता नहीं है।

उदाहरण के लिए, पायथन में आप क्या करेंगे:

data = db.orders.aggregate([{ "$match" : { "status": "A"} }])['result'] 
count = len(data) 
data = data[skip:skip+limit] 

आप एक बड़े डेटासेट पर एक जटिल कुल कॉल है, तो यह दो कॉल करने की तुलना में काफी तेज है।

+0

यदि डेटासेट बहुत बड़ा है तो यह स्मृति में फिट नहीं हो सकता है - यही कारण है कि आप एप्लिकेशन सर्वर मेमोरी में सभी परिणाम सेट लोड करने के बजाय स्ट्रीमिंग कर्सर प्राप्त कर सकते हैं। इसके अलावा, डीबी सर्वर द्वारा ऑपरेशन गिनती करने के लिए निष्पादन आपके एप्लिकेशन सर्वर के लिए कुछ और करने के लिए समय बचाएगा। –

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