2013-02-04 14 views
5

के साथ सभी दस्तावेजों के लिए MongoDB क्वेरी मुझे प्रश्न में बहुत सारे जवाब दिखाई देते हैं "मैं एक क्षेत्र में सभी अद्वितीय मूल्य कैसे प्राप्त करूं?" जो .distinct() विधि का सुझाव देता है। लेकिन यह उन मूल्यों की एक सरल सरणी देता है। मैं उन सभी दस्तावेजों को कैसे प्राप्त करूं जिनके पास फ़ील्ड का अद्वितीय मूल्य है?अद्वितीय क्षेत्र

[{age: 21, name: 'bob'}, {age: 21, name: 'sally'}, {age: 30, name: 'Jim'}] 
Query for unique age --> 
[{age: 21, name: 'sally'}, {age: 30, name: 'Jim'}] 
or 
[{age: 21, name: 'bob'}, {age: 30, name: 'Jim'}] 

एक प्रश्न छानने के बाद-तथ्य एक आदर्श समाधान नहीं है, के रूप में मैं अभी भी चयन करने के लिए, $ सीमा चाहते हैं, और $ के रूप में हमेशा की तरह छोड़ सकते हैं।

+0

'सैली' और 'बॉब' के बीच चयन करने के लिए आपका मानदंड क्या है, यदि दोनों की उम्र समान है? –

+0

वास्तव में सामान्य रूप से दो दस्तावेज़ों का चयन करने के लिए मानदंड क्या हैं? आप किस दस्तावेज़ को वापस करना चाहते हैं? – Sammaye

+0

@RyanArtecona आपने मेरे अनुवर्ती प्रश्न (फ़िल्टर को निर्दिष्ट करने के लिए कैसे) की भविष्यवाणी की है। मेरे विशेष उपयोग-मामले के लिए मुझे "नवीनतम" रिकॉर्ड की आवश्यकता है, लेकिन मुझे नहीं लगता था कि यह देखने के लिए यहां पानी को गंदे करना जरूरी होगा कि कोई कैसे फ़िल्टर करेगा। – Sinetheta

उत्तर

3
> db.foo.insert([{age: 21, name: 'bob'}, {age: 21, name: 'sally'}, {age: 30, name: 'Jim'}]) 
> db.foo.count() 
3 
> db.foo.aggregate({ $group: { _id: '$age', name: { $max: '$name' } } }).result 
[ 
    { 
     "_id" : 30, 
     "name" : "Jim" 
    }, 
    { 
     "_id" : 21, 
     "name" : "sally" 
    } 
] 
+1

तो सभी दस्तावेज़ों को "पुनर्निर्मित" करने की आवश्यकता है? क्या होगा यदि अन्य गुण थे (उदाहरण: ऊंचाई, वजन), हम '$ अधिकतम' '$ name' के साथ पूरा रिकॉर्ड कैसे प्राप्त करते हैं और समूह नामित $ आयु पर अधिकतम नाम पिन नहीं करते हैं? – Sinetheta

+0

यह सिर्फ एक एसक्यूएल "ग्रुप बाय" जैसा है, फिर यदि दस्तावेज़ों में 'अन्य_फील्ड' नामक फ़ील्ड है, तो आपको अपने '$ समूह' में एक अभिव्यक्ति जोड़नी चाहिए जिसमें कहा गया है कि आप उस क्षेत्र को कैसे समूहबद्ध करना चाहते हैं। मेरे उदाहरण में 'नाम: {$ अधिकतम:' $ name '}' अभिव्यक्ति देखें। –

+1

यह आपको उस व्यक्ति को जानकारी देगा जो अनिवार्य रूप से मौजूद नहीं है, '{" _id: 30 ", नाम:" आईडी 30 के साथ अधिकतम नाम ", अन्य_फील्ड:" आईडी 30 के साथ अधिकतम अन्य_फील्ड "}। (संपादित करने से पहले)। तो $ max: '$ name' के साथ रिकॉर्ड से अन्य_फील्ड प्राप्त करने का आदेश क्या है? – Sinetheta

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