मैं कई लेखों और उदाहरणों से गुज़रा हूँ, और अभी तक MongoDB में इस SQL क्वेरी को करने के लिए एक कुशल तरीका खोजना है (जहाँ लाखों लोग हैं पंक्तियों दस्तावेज)
पहली कोशिश
(इस लगभग डुप्लिकेट प्रश्न से - एसक्यूएल की चयन सूची के मानगो बराबर? )
db.myCollection.distinct("myIndexedNonUniqueField").length
जाहिर है मुझे यह त्रुटि मिली क्योंकि मेरा डेटासेट बहुत बड़ा है
Thu Aug 02 12:55:24 uncaught exception: distinct failed: {
"errmsg" : "exception: distinct too big, 16mb cap",
"code" : 10044,
"ok" : 0
}
दूसरा प्रयास
मैंने एक समूह बनाने की कोशिश की
db.myCollection.group({key: {myIndexedNonUniqueField: 1},
initial: {count: 0},
reduce: function (obj, prev) { prev.count++;} } );
लेकिन मुझे इसके बजाय यह त्रुटि संदेश मिला:
exception: group() can't handle more than 20000 unique keys
तीसरा प्रयास
मैंने अभी तक कोशिश नहीं की है लेकिन इसमें कई सुझाव हैं mapReduce
जैसे
- यह एक मोंगोडब में अलग और समूह कैसे करना है?(स्वीकृत नहीं, उत्तर लेखक / ओपी ने इसका परीक्षण नहीं किया)
- कार्यक्षमता द्वारा यह एक MongoDB समूह (दूसरे प्रयास के समान लगता है)
- यह एक http://blog.emmettshear.com/post/2010/02/12/Counting-Uniques-With-pong/2010DB
- यह एक https://groups.google.com/forum/?fromgroups# .topic/mongodb-user/trDn3jJjqtE
- यह एक http://cookbook.mongodb.org/patterns/unique_items_map_reduce/
भी
ऐसा लगता है कि GitHub पर एक पुल अनुरोध है, जिसका .distinct
उल्लेख करने के लिए विधि को ठीक करना चाहिए केवल एक गिनती वापस करनी चाहिए, लेकिन यह अभी भी खुला है: https://github.com/mongodb/mongo/pull/34
लेकिन इस बिंदु पर मैंने सोचा कि यह यहाँ पूछने लायक है, इस विषय पर नवीनतम क्या है? क्या मुझे अलग-अलग काउंट के लिए SQL या किसी अन्य NoSQL DB में जाना चाहिए? या एक कुशल तरीका है?
अपडेट करें:
MongoDB आधिकारिक डॉक्स पर यह टिप्पणी उत्साहजनक नहीं है, क्या यह सटीक है?
http://www.mongodb.org/display/DOCS/Aggregation#comment-430445808
Update2:
लगता है कि नई एग्रीगेशन फ्रेमवर्क उपरोक्त टिप्पणी का उत्तर देती है ... (मोंगोडो 2.1 / 2.2 और ऊपर, विकास पूर्वावलोकन उपलब्ध है, उत्पादन के लिए नहीं)