NumberLong(253351454) działa tylko dla liczb, które są na tyle małe, że nie muszą być… cóż, długie:powłoka musi je jakoś reprezentować w JS, więc może reprezentować tylko liczby, które
W przypadku większych liczb wymagana jest reprezentacja tekstowa, ponieważ nie ma wystarczająco dużego typu danych, stąd NumberLong("3059300418") z 3059300418 > 253351454 .
Innymi słowy, nie, nie ma różnicy . To tylko ograniczenie powłoki, a ogólniej mówiąc, JS i liczb zmiennoprzecinkowych.
Zastrzeżenie:nie próbuj wywoływać konstruktora ze zbyt dużą liczbą, tj. nie próbuj db.foo.insert({"t" : NumberLong(1234657890132456789)}); Ponieważ ta liczba jest zbyt duża dla podwojenia, spowoduje to błędy zaokrągleń. Powyższa liczba zostanie przekonwertowana na NumberLong("1234657890132456704") , co jest oczywiście błędne.