NumberLong(253351454)
só funciona para números que são pequenos o suficiente para que eles não precisem ser ... bem, longos:O shell deve representá-los em JS de alguma forma, então ele só pode representar números que Para números maiores, é necessária uma representação textual porque não há tipo de dados grande o suficiente disponível, portanto,
NumberLong("3059300418")
com 3059300418 > 253351454
. Em outras palavras, não, não há diferença . É apenas uma limitação do shell, ou mais genericamente, de JS e números de ponto flutuante.
Advertência:Não tente invocar o construtor com um número muito grande, ou seja, não tente
db.foo.insert({"t" : NumberLong(1234657890132456789)});
Como esse número é muito grande para um duplo, causará erros de arredondamento. O número acima seria convertido para NumberLong("1234657890132456704")
, o que está errado, obviamente.