MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Das MongoDB-Nummernfeld wird die von mir eingegebene Nummer nicht einfügen oder aktualisieren

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)