NumberLong(253351454)
werkt alleen voor getallen die zo klein zijn dat ze niet ... nou ja, lang hoeven te zijn:de shell moet ze op de een of andere manier in JS vertegenwoordigen, dus het kan alleen getallen vertegenwoordigen die
Voor grotere getallen is een tekstuele weergave vereist omdat er geen datatype beschikbaar is dat groot genoeg is, vandaar NumberLong("3059300418")
met 3059300418 > 253351454
.
Met andere woorden, nee, er is geen verschil . Het is gewoon een beperking van de shell, of meer in het algemeen, van JS en floating point getallen.
Waarschuwing:probeer de constructor niet aan te roepen met een te groot getal, d.w.z. probeer niet db.foo.insert({"t" : NumberLong(1234657890132456789)});
Aangezien dat aantal veel te groot is voor een dubbel, zal het afrondingsfouten veroorzaken. Bovenstaand nummer wordt geconverteerd naar NumberLong("1234657890132456704")
, wat natuurlijk verkeerd is.