NumberLong(253351454)
funktioniert nur für Zahlen, die klein genug sind, dass sie nicht sein müssen ... naja, lange:Die Shell muss sie irgendwie in JS darstellen, also kann sie nur Zahlen darstellen, die
Für größere Zahlen ist eine Textdarstellung erforderlich, da kein ausreichend großer Datentyp verfügbar ist, daher NumberLong("3059300418")
mit 3059300418 > 253351454
.
Mit anderen Worten, nein, es gibt keinen Unterschied . Es ist nur eine Einschränkung der Shell, oder allgemeiner gesagt, von JS und Fließkommazahlen.
Achtung:Versuchen Sie nicht, den Konstruktor mit einer zu großen Zahl aufzurufen, d. h. versuchen Sie es nicht mit db.foo.insert({"t" : NumberLong(1234657890132456789)});
Da diese Zahl viel zu groß für ein Doppel ist, führt dies zu Rundungsfehlern. Die obige Zahl würde in NumberLong("1234657890132456704")
umgewandelt , was offensichtlich falsch ist.