बारीक-किरकिरा विवरण
नवीनतम स्रोत से पढ़ना /ए> , null
. से तुलना करते समय मूल रूप से 2 मामले होते हैं :
- अगर कैनोनिकल प्रकार ए> बीएसओएन तत्वों की तुलना की जा रही है, अलग हैं, केवल समानता तुलना (
- अगर कैनोनिकल प्रकार ए> समान हैं (यानी, दोनों तत्व
==
, >=
, <=
) अशक्त और अपरिभाषित true
return लौटाएगा; अन्यथा null
. के साथ कोई तुलना false
लौटाएगा . नोट: किसी अन्य बीएसओएन प्रकार में वही विहित प्रकार नहीं है जो
null
. है ।
null
हैं ), फिर compareElementValues
कहा जाता है। null
के लिए , यह केवल कैनोनिकल के बीच का अंतर लौटाता है टाइप करें
दोनों बीएसओएन तत्वों की और फिर 0
. के खिलाफ अनुरोधित तुलना करता है .उदाहरण के लिए,
null > null
(5-5) > 0 --> False
. में अनुवाद होगा क्योंकि विहित प्रकार की नल 5 है।इसी तरह,
null < null
(5-5) < 0 --> False
. में अनुवाद होगा ।
इसका अर्थ है null
केवल कभी भी null
. के बराबर हो सकता है या undefined
. कोई अन्य तुलना जिसमें null
. शामिल है हमेशा false
लौटाएगा ।
क्या यह बग है?
अपडेट किया गया उत्तर:
तुलना ऑपरेटरों के लिए दस्तावेज़ीकरण ($gt
, $lt
) संदर्भ दस्तावेज़ीकरण जिसे आपने मूल रूप से लिंक किया थाए> , जिसका अर्थ है कि तुलना ऑपरेटरों को चाहिए null
. के साथ काम करें . इसके अलावा, क्वेरी सॉर्टिंग (अर्थात , db.find().sort()
) करता है प्रलेखित तुलना/क्रमबद्ध व्यवहार का सटीक रूप से पालन करें।
यह कम से कम असंगत है। मुझे लगता है कि MongoDB की JIRA साइट पर बग रिपोर्ट सबमिट करना उचित होगा ।
मूल उत्तर:
मुझे नहीं लगता कि यह व्यवहार कोई बग है।
जावास्क्रिप्ट के लिए आम सहमति
क्या वह undefined
है मतलब असाइन किया गया जबकि null
मतलब असाइन किया गया लेकिन अन्यथा अपरिभाषित . अपरिभाषित के खिलाफ मूल्य तुलना, समानता के अलावा, कम से कम गणितीय अर्थ में कोई मतलब नहीं है।
यह देखते हुए कि बीएसओएन जावास्क्रिप्ट से बहुत अधिक आकर्षित करता है, यह मोंगोडीबी पर भी लागू होता है।