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 metnullretourneertfalse.
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 > nullzou vertalen in(5-5) > 0 --> Falseomdat het canonieke type null 5 is.
Evenzo,null < nullzou 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.