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 बनाने के लिए?