2012-08-29 18 views
11

पर एक सरणी फ़ील्ड का एक अलग एकत्रीकरण प्राप्त करना मैं MongoDB सीखने की कोशिश कर रहा हूं और यह मेरे लिए विश्लेषिकी के लिए कैसे उपयोगी होगा। मैं सिर्फ अपने वेबसाइट पर उपलब्ध JavaScript कंसोल के साथ चारों ओर खेल रहा हूँ और निम्नलिखित मदों बनाया है:इंडेक्स

{"title": "Cool", "_id": {"$oid": "503e4dc0cc93742e0d0ccad3"}, "tags": ["twenty", "sixty"]} 
{"title": "Other", "_id": {"$oid": "503e4e5bcc93742e0d0ccad4"}, "tags": ["ten", "thirty"]} 
{"title": "Ouch", "_id": {"$oid": "503e4e72cc93742e0d0ccad5"}, "tags": ["twenty", "seventy"]} 
{"title": "Final", "_id": {"$oid": "503e4e72cc93742e0d0ccad6"}, "tags": ["sixty", "seventy"]} 

मैं क्या करना चाहते हैं क्या क्वेरी है तो मैं इन वस्तुओं में से सभी के लिए अद्वितीय टैग की एक सूची प्राप्त । परिणाम इस तरह कुछ दिखना चाहिए:

["ten", "twenty", "thirty", "sixty", "seventy"] 

मैं इसके लिए कैसे पूछूं? मैं distinct() पर कोशिश कर रहा हूं, लेकिन कॉल हमेशा पूछे बिना विफल रहता है।

उत्तर

24

कोड है कि उनकी वेबसाइट पर विफल रहता है एक वास्तविक MongoDB उदाहरण पर काम करता है:

> db.posts.insert({title: "Hello", tags: ["one", "five"]}); 
> db.posts.insert({title: "World", tags: ["one", "three"]}); 
> db.posts.distinct("tags"); 
[ "one", "three", "five"] 

अजीब।

+1

आपने क्या त्रुटि संदेश मिलता है? मेरा मानना ​​है कि कंसोल बहुत पुरानी मोंगो संस्करण पर चल रहा है ... – Sammaye

+0

यह कोड मोंगो 3.6.0 – kopos

3

उपलब्ध वेब मोंगो शान्ति की जोड़ी के होते हैं:

लेकिन आप उन्हें में मदद टाइप करता है, तो आप वे केवल ऑप्स की एक बहुत छोटी संख्या का समर्थन एहसास होगा:

HELP 
Note: Only a subset of MongoDB's features are provided here. 
For everything else, download and install at mongodb.org. 

db.foo.help()     help on collection method 
db.foo.find()     list objects in collection foo 
db.foo.save({a: 1})   save a document to collection foo 
db.foo.update({a: 1}, {a: 2}) update document where a == 1 
db.foo.find({a: 1})   list objects in foo where a == 1 

it       use to further iterate over a cursor 

जैसा कि इस तरह के विशिष्ट नहीं है काम करें क्योंकि यह समर्थित नहीं है।

+0

@wkhatch के साथ पूरी तरह से काम करता है यदि आप फिर से प्रश्न पढ़ते हैं तो ओपी पूछताछ करने के लिए इस्तेमाल किए गए वेब कंसोल में एकत्रीकरण कैसे करें MongoDB साइट पर। मैंने सही ढंग से उत्तर दिया कि आप नहीं कर सकते – Sammaye

5

आप एकत्रीकरण ढांचे का उपयोग कर सकते हैं। आप कैसे करना चाहते हैं परिणाम संरचित के आधार पर आप उपयोग कर सकते हैं या तो

var pipeline = [ 
     {"$unwind": "$tags" } , 
     { "$group": { _id: "$tags" } } 
    ]; 
R = db.tb.aggregate(pipeline); 
printjson(R); 

{ 
     "result" : [ 
       { 
         "_id" : "seventy" 
       }, 
       { 
         "_id" : "ten" 
       }, 
       { 
         "_id" : "sixty" 
       }, 
       { 
         "_id" : "thirty" 
       }, 
       { 
         "_id" : "twenty" 
       } 
     ], 
     "ok" : 1 
} 

या

var pipeline = [ 
     {"$unwind": "$tags" } , 
     { "$group": 
      { _id: null, tags: {"$addToSet": "$tags" } } 
     } 
    ]; 
R = db.tb.aggregate(pipeline); 
printjson(R); 

{ 
     "result" : [ 
       { 
         "_id" : null, 
         "tags" : [ 
           "seventy", 
           "ten", 
           "sixty", 
           "thirty", 
           "twenty" 
         ] 
       } 
     ], 
     "ok" : 1 
} 
7

आप इस का उपयोग करने के लिए सक्षम होना चाहिए:

db.mycollection.distinct("tags").sort() 
1

अद्वितीय होने का एक और तरीका है एग्रीगेशन पाइपलाइन

db.blogs.aggregate(
    [ 
    {$group:{_id : null, uniqueTags : {$push : "$tags"}}}, 
    {$project:{ 
     _id : 0, 
     uniqueTags : { 
     $reduce : { 
      input : "$uniqueTags", 
      initialValue :[], 
      in : {$let : { 
      vars : {elem : { $concatArrays : ["$$this", "$$value"] }}, 
      in : {$setUnion : "$$elem"} 
      }} 
     } 
     } 
    }} 
    ] 
) 
का उपयोग कर सरणी तत्व 210

संग्रह

> db.blogs.find() 
{ "_id" : ObjectId("5a6d53faca11d88f428a2999"), "name" : "sdfdef", "tags" : [ "abc", "def", "efg", "abc" ] } 
{ "_id" : ObjectId("5a6d5434ca11d88f428a299a"), "name" : "abcdef", "tags" : [ "abc", "ijk", "lmo", "zyx" ] } 
> 

पाइपलाइन

> db.blogs.aggregate(
...  [ 
...  {$group:{_id : null, uniqueTags : {$push : "$tags"}}}, 
...  {$project:{ 
...   _id : 0, 
...   uniqueTags : { 
...   $reduce : { 
...    input : "$uniqueTags", 
...    initialValue :[], 
...    in : {$let : { 
...    vars : {elem : { $concatArrays : ["$$this", "$$value"] }}, 
...    in : {$setUnion : "$$elem"} 
...    }} 
...   } 
...   } 
...  }} 
...  ] 
... ) 

परिणाम

{ "uniqueTags" : [ "abc", "def", "efg", "ijk", "lmo", "zyx" ] } 
संबंधित मुद्दे