NumberLong(253351454)
funziona solo per numeri abbastanza piccoli da non dover essere... beh, lunghi:la shell deve rappresentarli in qualche modo in JS, quindi può rappresentare solo numeri che
Per numeri più grandi, è necessaria una rappresentazione testuale perché non è disponibile un tipo di dati sufficientemente grande, quindi NumberLong("3059300418")
con 3059300418 > 253351454
.
In altre parole, no, non c'è differenza . È solo una limitazione della shell, o più in generale, di JS e numeri in virgola mobile.
Avvertenza:non tentare di invocare il costruttore con un numero troppo grande, ad es. non provare db.foo.insert({"t" : NumberLong(1234657890132456789)});
Poiché quel numero è troppo grande per un doppio, causerà errori di arrotondamento. Il numero sopra verrebbe convertito in NumberLong("1234657890132456704")
, che è sbagliato, ovviamente.