NumberLong(253351454) fungerar bara för tal som är tillräckligt små för att de inte behöver vara ... ja, långa:Skalet måste representera dem i JS på något sätt, så det kan bara representera tal som
För större siffror krävs en textrepresentation eftersom det inte finns någon tillräckligt stor datatyp tillgänglig, därför NumberLong("3059300418") med 3059300418 > 253351454 .
Med andra ord, nej, det är ingen skillnad . Det är bara en begränsning av skalet, eller mer allmänt sett, av JS och flyttal.
Varning:Försök inte anropa konstruktorn med ett för stort nummer, d.v.s. försök inte db.foo.insert({"t" : NumberLong(1234657890132456789)}); Eftersom den siffran är alldeles för stor för en dubbel kommer det att orsaka avrundningsfel. Ovanstående nummer skulle konverteras till NumberLong("1234657890132456704") , vilket är fel, uppenbarligen.