2011-09-18 7 views
5

मैं MongoDB पर इस SQL ​​विवरण निष्पादित करने के लिए चाहते हैं का उपयोग कर का चयन करें:अलग एक से अधिक क्षेत्र MongoDB के नक्शे को कम

SELECT DISTINCT book,author from library 

अब तक MongoDB के DISTINCT केवल एक ही क्षेत्र में एक समय में समर्थन करता है। एक से अधिक फ़ील्ड के लिए, हमें ग्रुप कमांड या मैप-कम का उपयोग करना होगा। 10,000 चाबियाँ करने के लिए

db.library.group({ 
    key: {book:1, author:1}, 
    reduce: function(obj, prev) { if (!obj.hasOwnProperty("key")) { 
     prev.book = obj.book; 
     prev.author = obj.author; 
    }}, 
    initial: { } 
}); 

हालांकि इस दृष्टिकोण का समर्थन करता है केवल ऊपर:

मैं ग्रुप आदेश का उपयोग करने के लिए एक तरह से googled है। किसी को भी पता है कि इस समस्या को हल करने के लिए मानचित्र का उपयोग कैसे करें?

उत्तर

4

इस article पर एक नज़र डालें जो बताता है कि मोंगोडीबी में मानचित्र-कमी का उपयोग करके अद्वितीय लेख कैसे प्राप्त करें।

आपका फेंकना बयान की तरह कुछ लग रहा है:

emit({book: this.book, author: this.author}, {exists: 1}); 

और अपने को कम के बाद से आप के बारे में कितने वहाँ प्रत्येक समूह के लिए कर रहे हैं परवाह नहीं है उदाहरण से भी सरल हो सकता है।

return {exists: 1}; 
+0

बहुत बहुत शुक्रिया प्राप्त करें। यह अच्छा काम करता है। लेकिन मुझे अभी भी '{मौजूद: 1}' के कार्य को खोजने में कठिनाई है। मेरी समझ में यह प्रत्येक अद्वितीय मूल्य के लिए एक पहचानकर्ता है। लेकिन मुझे अभी भी यह अजीब लगता है। –

+1

आमतौर पर मूल्य अधिक जटिल है और इसमें कई फ़ील्ड हैं। आप इसे मान 1 को उत्सर्जित करने के लिए सरल बना सकते हैं लेकिन '{मौजूद: 1} 'अधिक आत्म-स्पष्टीकरणपूर्ण है और जब आप इसे बाद में और फ़ील्ड जोड़ना चाहते हैं तो इसे आसान बना देगा। –

3

यदि किसी को भी इसी तरह की समस्या का सामना करना पड़ता है। यह पूर्ण समाधान है:

मानचित्र कदम

map= "function(){ 
    emit(
      {book: this.book, author:this.author}, {exists: 1} 
     ); 
    }" 

कम कदम

reduce= "function(key, value){ 
      return {exists: 1}; 
    }" 

भागो आदेश

result= db.runCommand({ 
     "mapreduce": "library", 
     "map": map, 
     "reduce": reduce, 
     "out: "result" 
    }) 

परिणाम

db.result.find() 
संबंधित मुद्दे