Nitty-Gritty-details
- Als de canonieke typen van de BSON-elementen die worden vergeleken zijn verschillend, alleen gelijkheidsvergelijkingen (
==
,>=
,<=
) van null &undefined retourneerttrue
; anders elke vergelijking metnull
retourneertfalse
.
Opmerking: Geen enkel ander BSON-type heeft hetzelfde canonieke type alsnull
. - Als de canonieke typen zijn hetzelfde (d.w.z. beide elementen zijn
null
), dan vergelijken wordt genoemd. Voornull
, dit geeft alleen het verschil terug tussen de canonical typ van beide BSON-elementen en voert vervolgens de gevraagde vergelijking uit met0
.
Bijvoorbeeldnull > null
zou vertalen in(5-5) > 0 --> False
omdat het canonieke type null 5 is.
Evenzo,null < null
zou vertalen in(5-5) < 0 --> False
.
Dit betekent null
kan alleen gelijk zijn aan null
of undefined
. Elke andere vergelijking met null
retourneert altijd false
.
Is dit een bug?
Bijgewerkt antwoord:
De documentatie voor de vergelijkingsoperatoren ($gt
, $lt
) referenties de documentatie die u oorspronkelijk heeft gelinkt , wat inhoudt dat de vergelijkingsoperatoren moeten werk met null
. Bovendien is het sorteren van zoekopdrachten (d.w.z. , db.find().sort()
) doet volg nauwkeurig het gedocumenteerde Vergelijkings-/Sorteergedrag.
Dit is op zijn minst inconsequent. Ik denk dat het de moeite waard is om een bugrapport in te dienen bij MongoDB's JIRA-site .
Oorspronkelijk antwoord:
Ik denk niet dat dit gedrag een bug is.
De algemene consensus voor Javascript
is dat undefined
betekent niet toegewezen terwijl null
betekent toegewezen maar verder niet gedefinieerd . Waardevergelijkingen met ongedefinieerd, afgezien van gelijkheid, hebben geen zin, althans in wiskundige zin.
Aangezien BSON veel gebruik maakt van JavaScript, geldt dit ook voor MongoDB.