2013-09-02 14 views
8

मान लीजिए मैं एक संग्रह निम्नलिखित दस्तावेजों के साथ 'लोग' कहा जाता है:MongoDB में एकाधिक दस्तावेज़ों से सरणी को कैसे जोड़ना है?

{ 
    "name": "doug", 
    "colors": ["blue", "red"] 
} 

{ 
    "name": "jack", 
    "colors": ["blue", "purple"] 
} 

{ 
    "name": "jenny", 
    "colors": ["pink"] 
} 

मैं सभी colors subarrays है, यानी की एक concatenated सरणी कैसे प्राप्त होगा?

["blue", "red", "blue", "purple", "pink"] 

उत्तर

15

कोशिश कुल उपयोग करने के लिएके बजाय ऑपरेटरचरण में।

+0

HI लेकिन अगर मुझे परिणाम में अद्वितीय मूल्य की आवश्यकता है तो मैं इसे कैसे प्राप्त करूंगा क्योंकि यह निश्चित रूप से इस सरणी – viren

+2

में डुप्लिकेट प्रविष्टि देगा। ऐसा करने के लिए आप '$ $ push' ऑपरेटर को '$ $ addToSet' '{$ समूह: {_ id: null, clrs: {$ push:" $ colors "}}} में बदल सकते हैं,' स्ट्रिंग। –

17

ठीक है, कोशिश करें कि आपके लिए ठीक काम करना चाहिए !!

db.people.aggregate([ 
    {$unwind:"$colors"}, 
    {$group:{_id:null, clrs: {$push : "$colors"} }}, 
    {$project:{_id:0, colors: "$clrs"}} 
]) 

परिणाम::

{ 
"result" : [ 
    { 
     "colors" : [ 
      "blue", 
      "red", 
      "blue", 
      "purple", 
      "pink" 
     ] 
    } 
], 
"ok" : 1 
} 

अपडेट किया गया

आप परिणाम की सरणी में अद्वितीय मान प्राप्त करना चाहते हैं, तो आप $addToSet इस्तेमाल कर सकते हैं

db.people.distinct("colors") 
+1

सरल और कुशल! यह जवाब स्वीकार किया जाना चाहिए। – Mithril

+0

बहुत अच्छा, बिल्कुल मुझे क्या चाहिए; यह जानना भी अच्छा है कि आप परिणामों को फ़िल्टर करने के लिए 'विशिष्ट' पर वैकल्पिक क्वेरी पास कर सकते हैं। [स्रोत] (https://docs.mongodb.com/manual/reference/method/db.collection.distinct/#specify-query-with-distinct) – zaboco

+0

धन्यवाद आदमी, बिल्कुल मुझे चाहिए :) –

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