MongoDB में, $allElementsTrue
एकत्रीकरण पाइपलाइन ऑपरेटर एक सेट के रूप में एक सरणी का मूल्यांकन करता है और true
returns देता है यदि सरणी में कोई तत्व false
नहीं है .
यदि सरणी में कोई तत्व है जो false
है , फिर $allElementsTrue
रिटर्न false
।
एक सरणी का तत्व true
है अगर यह false
नहीं है , null
, 0
, या undefined
।
उदाहरण
मान लीजिए कि हमारे पास निम्नलिखित दस्तावेज़ के साथ एक संग्रह है:
{ "_id" : 1, "data" : [ 1, 2, 3 ] }
इस दस्तावेज़ में एक सरणी है।
हम निम्नलिखित क्वेरी को $allElementsTrue
. के साथ चला सकते हैं यह पता लगाने के लिए कि सरणी में कोई तत्व है या नहीं false
:
db.test.aggregate(
[
{ $project: {
_id: 0,
allElementsTrue: { $allElementsTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "allElementsTrue" : true }
इस मामले में, कोई भी सरणी तत्व false
नहीं है , और इसलिए हमें true
. का परिणाम मिलता है ।
जब सरणी में गलत हो
आइए संग्रह में निम्नलिखित दस्तावेज़ जोड़ें:
{ "_id" : 2, "data" : [ true, false ] }
और चलिए $allElementsTrue
चलाते हैं उस दस्तावेज़ के विरुद्ध:
db.test.aggregate(
[
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
allElementsTrue: { $allElementsTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "allElementsTrue" : false }
इस बार हमें false
मिलता है , भले ही एक और तत्व है जो true
. है . यह अपेक्षित है, क्योंकि $allElementsTrue
रिटर्न false
जब भी कम से कम एक ऐसा तत्व हो जो false
हो , भले ही कितने अन्य तत्व सत्य हों।
खाली सरणी
खाली सरणियाँ true
लौटाती हैं ।
मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:
{ "_id" : 3, "data" : [ ] }
इस दस्तावेज़ में एक खाली सरणी है।
अब चलिए $allElementsTrue
चलाते हैं फिर से:
db.test.aggregate(
[
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
allElementsTrue: { $allElementsTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "allElementsTrue" : true }
जैसा कि अपेक्षित था, यह true
लौटाता है ।
शून्य, 0 और अपरिभाषित मान
यह पूरी तरह सच नहीं है कि $allElementsTrue
false
का मूल्यांकन करता है केवल जब सरणी में false
होता है ।
$allElementsTrue
ऑपरेटर false
. का भी मूल्यांकन करता है जब भी किसी सरणी में null
होता है , 0
, या undefined
मान।
मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:
{ "_id" : 4, "data" : [ 1, null, 3 ] } { "_id" : 5, "data" : [ 1, undefined, 3 ] } { "_id" : 6, "data" : [ 0, 1, 2 ] }
प्रत्येक दस्तावेज़ की सरणी में null
. का एक तत्व होता है , 0
, या undefined
।
अब चलिए $allElementsTrue
चलाते हैं उन दस्तावेज़ों के विरुद्ध:
db.test.aggregate(
[
{ $match: {_id: { $in: [4,5,6] }} },
{ $project: {
allElementsTrue: { $allElementsTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "_id" : 4, "allElementsTrue" : false } { "_id" : 5, "allElementsTrue" : false } { "_id" : 6, "allElementsTrue" : false }
सभी दस्तावेज़ false
लौटाते हैं जैसी उम्मीद थी।
नेस्टेड सरणी
यदि सरणी में एक नेस्टेड सरणी है जिसमें एक तत्व है जो false
है , तो यह $allElementsTrue
. के लिए पर्याप्त नहीं है false
लौटाने के लिए . जहां तक $allElementsTrue
. की बात है संबंधित है, नेस्टेड सरणी तत्व है, और इसलिए नहीं false
।
मेरे मतलब को प्रदर्शित करने के लिए, मान लीजिए कि हम निम्नलिखित दस्तावेज़ सम्मिलित करते हैं:
{ "_id" : 7, "data" : [ 1, [ false ], 3 ] } { "_id" : 8, "data" : [ 1, [ false ], false ] }
अब चलिए $allElementsTrue
चलाते हैं उन दो दस्तावेज़ों के विरुद्ध:
db.test.aggregate(
[
{ $match: {_id: { $in: [7,8] }} },
{ $project: {
allElementsTrue: { $allElementsTrue: [ "$data" ] } }
}
]
)
परिणाम:
{ "_id" : 7, "allElementsTrue" : true } { "_id" : 8, "allElementsTrue" : false }
हम देख सकते हैं कि पहला दस्तावेज़ true
लौटाया गया है और दूसरा लौटा false
।
ऐसा इसलिए है, क्योंकि पहले दस्तावेज़ में, false
मान किसी अन्य सरणी के अंदर नेस्टेड है, और इसलिए इसे false
. के रूप में नहीं गिना जाता है मान (अर्थात सरणी ही मान है)।
हालांकि, दूसरे दस्तावेज़ में सरणी तत्वों में से एक के रूप में झूठा भी शामिल है, और इसलिए, वह मान $allElementsTrue
का कारण बनता है false
का मूल्यांकन करने के लिए ।