MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

सरणी के भीतर स्थितियों के आधार पर सरणी से अलग मान प्राप्त करें

.distinct() के साथ क्वेरी शर्तें "दस्तावेज़ चयन" पर लागू होता है न कि दस्तावेज़ में "भीतर" वाली सरणी प्रविष्टियाँ। यदि आपको सरणी सामग्री को "फ़िल्टर" करने की आवश्यकता है तो आप .एग्रीगेट () इसके बजाय, साथ ही साथ सरणी प्रतिक्रिया में केवल "मान" प्राप्त करने के लिए थोड़ा पोस्ट प्रोसेसिंग।

db.collection.aggregate([
  { "$match": { "_id": "TEST" } },
  { "$unwind": "$payload" },
  { "$match": { "payload.status": { "$in": ["TRUE","FALSE"] } } },
  { "$group": { "_id": "$payload._id" } },
]).map( d => d._id );

मुख्य भाग हैं $unwind पाइपलाइन चरण जो आप मुख्य रूप से करते हैं क्योंकि आप चाहते हैं कि सरणी के भीतर के मान बाद में $समूह पर। यह अनिवार्य रूप से प्रत्येक सरणी सदस्य के लिए एक नया दस्तावेज़ तैयार करता है, लेकिन प्रत्येक दस्तावेज़ में केवल वह सरणी सदस्य होता है। यह MongoDB संरचनाओं के लिए "डिनॉर्मलाइज़िंग" है जिसमें सरणियाँ होती हैं।

अगली चीज़ निम्न है $match पाइपलाइन, जो किसी भी क्वेरी की तरह काम करती है और केवल शर्तों से मेल खाने वाले दस्तावेज़ों का चयन करती है। चूंकि सभी सरणी सदस्य अब "दस्तावेज़" हैं, इसलिए गैर मिलान प्रविष्टियां (दस्तावेज़ों के रूप में) को बाहर रखा गया है। आप वैकल्पिक रूप से $filter का उपयोग कर सकते हैं अभी भी एक सरणी निकालने के लिए, लेकिन चूंकि हमें $unwind की आवश्यकता है अगले चरण के लिए हम बस $मिलान . भी कर सकते हैं ।

इस बिंदु पर आप केवल उन सरणी प्रविष्टियों के साथ बचे हैं जो शर्तों से मेल खाती हैं। $group "विशिष्ट" मान प्राप्त करना है, इसलिए आम तौर पर आप इसे केवल एक दस्तावेज़ या किसी भी चीज़ की तुलना में व्यापक चयन पर करेंगे जहां यहां मान पहले से अलग नहीं हैं। तो यह वास्तव में केवल के समान व्यवहार को बनाए रखना है .विशिष्ट () बरकरार।

अंत में, .aggregate()<के आउटपुट के बाद से /कोड> .distinct() इसमें यह परिणामों में "दस्तावेज़" देता है, हम बस .मैप () कर्सर परिणामों को संसाधित करने के लिए विधि और विशिष्ट दस्तावेज़ संपत्ति से "सरणी" के रूप में केवल "मान" लौटाएं।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB में सटीक तत्व सरणी में फ़ील्ड अपडेट करें

  2. Node.js Mongoose.js स्ट्रिंग ObjectId फ़ंक्शन के लिए

  3. ejs . का उपयोग करके मोंगो से एक संपादन पर एक तिथि प्रदर्शित करें

  4. नेवला:समुच्चय का उपयोग कैसे करें और एक साथ कैसे खोजें

  5. CentOS 8 . पर MongoDB स्थापित करना

© कॉपीराइट http://hi.sqldat.com सर्वाधिकार सुरक्षित