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 का मूल्यांकन करने के लिए ।