Entschuldigung, ich habe Ihre Frage am Anfang nicht verstanden und daher eine falsche Antwort gegeben (danke Cababunga für den Hinweis). Also hier ist ein richtiger.
Mongoshell unterstützt verschiedene Datentypen . Und es versucht, Ihren Datentyp zu erraten, wenn Sie ihn eingeben. Geben Sie also Ihre große Zahl ein:138548488276343678 . Beachten Sie, dass es größer als 2 ^ 31-1 ist, was das Maximum für 32-Bit-Ganzzahlen ist. Es behandelt es also als Float und da Floats nicht genau gespeichert werden, modifiziert es es ein wenig. Aus diesem Grund ist Ihre gespeicherte Nummer fast dieselbe, unterscheidet sich jedoch geringfügig (diese Differenz beträgt weniger als 8). Aber Sie möchten diese Zahl genau speichern und Mongo unterstützt 64-Bit-Ganzzahlen (die zu Ihrer Ganzzahl passen).
Sie müssen also angeben, dass Sie es als 64-Bit-Ganzzahl . Sie können dies folgendermaßen tun:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Danach können Sie Ihr Dokument db.a.find()
abrufen und es wird stimmen. Beachten Sie, dass viele Treiber ähnliche Probleme haben und Sie daher explizit angeben müssen, dass Sie sie als 64-Bit-Integer speichern werden.
Wenn Sie _id
nicht angeben für das Dokument, das Sie erstellen, erstellt mongodb _id
Feld für sich. Sie können etwas mehr über _id
lesen hier
und in der offiziellen Dokumentation
.
Wenn Sie ein eigenes Feld haben, das Sie als _id
verwenden möchten , statt id:138548488276343678
zu schreiben Sie sollten _id : 138548488276343678
.
P.S. Auch weil ich sehe, dass Sie ziemlich große Zahlen verwenden, denken Sie daran, dass Integer in Mongodb als 64-Bit-Ganzzahlen (was bedeutet, dass es zwischen -2^63 und 2^63 - 1 liegt)