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

मोंगोडीबी $anyElementTrue

MongoDB में, $anyElementTrue एकत्रीकरण पाइपलाइन ऑपरेटर एक सेट के रूप में एक सरणी का मूल्यांकन करता है और true returns देता है यदि कोई भी तत्व true है ।

यदि कोई भी तत्व true नहीं है , तो यह false . लौटाता है ।

एक सरणी का तत्व true है अगर यह false नहीं है , null , 0 , या undefined ।

उदाहरण

मान लीजिए कि हमारे पास निम्नलिखित दस्तावेज़ के साथ एक संग्रह है:

{ "_id" : 1, "data" : [ 1, 2, 3 ] }

इस दस्तावेज़ में एक सरणी है।

हम निम्न क्वेरी को $anyElementTrue . के साथ चला सकते हैं यह पता लगाने के लिए कि सरणी में कोई तत्व है या नहीं जो true . का मूल्यांकन करता है :

db.test.aggregate(
   [
     { $project: { 
        _id: 0,
        anyElementTrue: { $anyElementTrue: [ "$data" ] } } 
         }
   ]
)

परिणाम:

{ "anyElementTrue" : true }

इस मामले में, सभी सरणी तत्व true . का मूल्यांकन करते हैं (यानी वे false नहीं हैं , null , 0 , या undefined ), और इसलिए हमें true . का परिणाम मिलता है ।

जब कोई तत्व सत्य नहीं है

आइए संग्रह में निम्नलिखित दस्तावेज़ जोड़ें:

{ "_id" : 2, "data" : [ false, undefined, 0, null ] }

और चलिये $anyElementTrue उस दस्तावेज़ के विरुद्ध:

db.test.aggregate(
  [
    { $match: { _id: 2 } },
    { $project: { 
      _id: 0,
      anyElementTrue: { $anyElementTrue: [ "$data" ] } } 
        }
  ]
)

परिणाम:

{ "anyElementTrue" : false }

जैसा कि हम यहां देख सकते हैं, $anyElementTrue false का मूल्यांकन करता है जब भी किसी सरणी में false होता है , null , 0 , या undefined मान।

जब सरणी में सही और गलत दोनों शामिल हों

आइए संग्रह में निम्नलिखित दस्तावेज़ जोड़ें:

{ "_id" : 3, "data" : [ true, false ] }

और चलिये $anyElementTrue उस दस्तावेज़ के विरुद्ध:

db.test.aggregate(
  [
    { $match: { _id: 3 } },
    { $project: { 
      _id: 0,
      anyElementTrue: { $anyElementTrue: [ "$data" ] } } 
        }
  ]
)

परिणाम:

{ "anyElementTrue" : true }

हमें true मिलता है , भले ही एक और तत्व है जो false . है . यह अपेक्षित है, क्योंकि $anyElementTrue true लौटाता है जब भी कम से कम एक ऐसा तत्व हो जो true . हो , भले ही कितने अन्य तत्व झूठे हों।

खाली सरणी

खाली सरणियाँ true लौटाती हैं ।

मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:

{ "_id" : 4, "data" : [ ] }

इस दस्तावेज़ में एक खाली सरणी है।

अब चलिए $anyElementTrue चलाते हैं फिर से:

db.test.aggregate(
  [
    { $match: { _id: 4 } },
    { $project: { 
      _id: 0,
      anyElementTrue: { $anyElementTrue: [ "$data" ] } } 
        }
  ]
)

परिणाम:

{ "anyElementTrue" : false }

यह false लौटाता है , क्योंकि एक खाली सरणी false नहीं है ।

नेस्टेड सरणी

$anyElementTrue ऑपरेटर नहीं करता है किसी भी नेस्टेड सरणी में उतरें। यह शीर्ष-स्तर पर सरणी का मूल्यांकन करता है।

इसलिए, क्या नेस्टेड सरणी में ऐसे तत्व हैं जो true हैं या false $anyElementTrue . के लिए अप्रासंगिक है . जहां तक ​​$anyElementTrue . की बात है संबंधित है, नेस्टेड सरणी तत्व है, और इसलिए true ।

मेरा क्या मतलब है यह प्रदर्शित करने के लिए, मान लीजिए कि हम निम्नलिखित दस्तावेज़ सम्मिलित करते हैं:

{ "_id" : 5, "data" : [ false, [ false ] ] }
{ "_id" : 6, "data" : [ false, false ] }

अब चलिए $anyElementTrue चलाते हैं उन दो दस्तावेज़ों के विरुद्ध:

db.test.aggregate(
  [
    { $match: {_id: { $in: [5,6] }} },
    { $project: { 
      anyElementTrue: { $anyElementTrue: [ "$data" ] } } 
        }
  ]
)

परिणाम:

{ "_id" : 5, "anyElementTrue" : true }
{ "_id" : 6, "anyElementTrue" : false }

हम देख सकते हैं कि पहला दस्तावेज़ true लौटाया गया है और दूसरा लौटा false ।

ऐसा इसलिए है, क्योंकि पहले दस्तावेज़ में सरणी में एक नेस्टेड सरणी है, जो true को वापस करने के लिए पर्याप्त है। , इसकी सामग्री की परवाह किए बिना।

दूसरे दस्तावेज़ में नेस्टेड सरणी नहीं है - इसमें केवल दो false शामिल हैं मान - और इसलिए यह false . का मूल्यांकन करता है ।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. dockerized mongo पर डेटा इनिशियलाइज़ करें

  2. मोंगोडीबी $cos

  3. MongoError:फ़िल्टर पैरामीटर एक वस्तु होना चाहिए

  4. स्प्रिंग डेटा - मोंगोडब - नेस्टेड वस्तुओं के लिए विधि द्वारा खोजें

  5. कैसे शुरू होने पर MongoDB कंटेनर के लिए एक DB बनाने के लिए?