sql >> Database >  >> NoSQL >> MongoDB

MongoDB-vergelijkingsoperatoren met null

Nitty-Gritty-details

De nieuwste Mongo-bron doorlezen /a> , er zijn in principe 2 gevallen bij het doen van vergelijkingen met null :

  1. Als de canonieke typen van de BSON-elementen die worden vergeleken zijn verschillend, alleen gelijkheidsvergelijkingen (== , >= , <= ) van null &undefined retourneert true; anders elke vergelijking met null retourneert false .
    Opmerking: Geen enkel ander BSON-type heeft hetzelfde canonieke type als null .
  2. Als de canonieke typen zijn hetzelfde (d.w.z. beide elementen zijn null ), dan vergelijken wordt genoemd. Voor null , dit geeft alleen het verschil terug tussen de canonical typ van beide BSON-elementen en voert vervolgens de gevraagde vergelijking uit met 0 .
    Bijvoorbeeld null > 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.




  1. Mongodb lees sloten

  2. Aan de slag met MongoDB-gebruikersbeheer

  3. DisabledBackend:grillig gedrag met selderij, redis en kolf

  4. Verkrijg de _id van het ingevoegde document in de Mongo-database in NodeJS