कैसे mongodb में ऑब्जेक्ट की सरणी में खोज करें


207

मान लीजिए कि मैंगोडब डॉक्यूमेंट (तालिका) 'उपयोगकर्ता' है

{
  _id: 1,
  name: { first: 'John', last: 'Backus' },
  birth: new Date('Dec 03, 1924'),
  death: new Date('Mar 17, 2007'),
  contribs: [ 'Fortran', 'ALGOL', 'Backus-Naur Form', 'FP' ],
  awards: [
            { award: 'National Medal',
              year: 1975,
              by: 'NSF' },
            { award: 'Turing Award',
              year: 1977,
              by: 'ACM' }
          ]
}
and other object(person)s

मैं उस व्यक्ति को ढूंढना चाहता हूं जिसके पास 'राष्ट्रीय पदक' है और उसे वर्ष 1975 में सम्मानित किया जाना चाहिए। ऐसे अन्य व्यक्ति हो सकते हैं जिनके पास यह पुरस्कार विभिन्न वर्षों में है।

मैं पुरस्कार प्रकार और वर्ष का उपयोग करके इस व्यक्ति को कैसे ढूंढ सकता हूं। तो मैं सटीक व्यक्ति प्राप्त कर सकता हूं।

जवाबों:


367

सही तरीका है:

db.users.find({awards: {$elemMatch: {award:'National Medal', year:1975}}})

$elemMatch आपको एक ही सरणी तत्व के भीतर एक से अधिक घटक से मेल खाने देता है।

बिना $elemMatchमूंग के उपयोगकर्ताओं को राष्ट्रीय पदक के साथ कुछ वर्ष और 1975 में कुछ पुरस्कार मिलेंगे, लेकिन 1975 में राष्ट्रीय पदक वाले उपयोगकर्ताओं के लिए नहीं।

अधिक जानकारी के लिए MongoDB $ elemMatch प्रलेखन देखें । सरणियों के साथ दस्तावेजों को क्वेरी करने के बारे में अधिक जानकारी के लिए ऑपरेशन दस्तावेज़ीकरण देखें ।


4
इलेवनमैच का पुरस्कार पुरस्कार 'और' वर्ष (पुरस्कार के विपरीत या 'वर्ष के लिए)
आदित्य मित्तल

हम केवल उन दस्तावेज़ों की क्वेरी कैसे करते हैं जिनमें जॉन के रूप में पहला नाम है और साधारण तरीके से राष्ट्रीय पदक के रूप में पुरस्कार है? हम इसे एग्रीगेट के साथ करते हैं और अवार्ड्स एरे के माध्यम से पुनरावृति करते हैं लेकिन सरल क्वेरी जानना चाहते हैं
वेंकटेश कोल्ला - user2742897

23

किसी विशेष वस्तु के सरणी को खोजने के लिए $ एलएममैच का उपयोग करें

db.users.findOne({"_id": id},{awards: {$elemMatch: {award:'Turing Award', year:1977}}})

0

इसे दो तरीकों से कर सकते हैं:

  1. एलिमेंटमैच - $elemMatch(जैसा कि ऊपर दिए गए उत्तरों में बताया गया है)

    db.users.find ({पुरस्कार: {$ elemMatch: {पुरस्कार: 'ट्यूरिंग अवार्ड', वर्ष: 1977}}})

  2. के $andसाथ प्रयोग करेंfind

    db.getCollection ('उपयोगकर्ता')। ({"$" और ": {{" अवार्ड्स.वार्ड ":" ट्यूरिंग अवार्ड "}, {" अवार्ड्स। प्रिय ": 1977}]})

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.