Sorry, ik begreep uw vraag in het begin niet en gaf daarom een verkeerd antwoord (bedankt cababunga voor het wijzen hierop). Dus hier is een juiste.
Mongoshell ondersteunt verschillende gegevenstypen . En het probeert uw gegevenstype te raden wanneer u het invoert. Dus je voert je grote getal in:138548488276343678 . Merk op dat het groter is dan 2^31-1, wat het maximum is voor een 32-bits geheel getal. Dus het behandelt het als een drijver en omdat drijvers niet precies worden opgeslagen, wijzigt het het een beetje. Dit is de reden waarom uw opgeslagen nummer bijna hetzelfde is, maar een klein beetje verschilt (dit verschil zal minder dan 8 zijn). Maar u wilt dit getal nauwkeurig opslaan en mongo ondersteunt 64-bits integer (wat bij uw integer past).
U moet dus specificeren dat u het wilt opslaan als 64-bits geheel getal . U kunt dit op de volgende manier doen:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Hierna kunt u uw document db.a.find()
. ophalen en het zal kloppen. Merk op dat veel stuurprogramma's vergelijkbare problemen hebben en daarom moet u expliciet aangeven dat u ze gaat opslaan als 64-bits geheel getal.
Als u _id
niet opgeeft voor het document dat u aan het maken bent, maakt mongodb _id
veld vanzelf. Je kunt iets meer lezen over _id
hier
en in officiële documentatie
.
Als u uw eigen veld heeft, dat u wilt gebruiken als _id
, in plaats van id:138548488276343678
. te schrijven je moet schrijven _id : 138548488276343678
.
PS ook omdat ik zie dat je vrij grote getallen gebruikt, moet je er rekening mee houden dat gehele getallen in mongodb zoals opgeslagen als 64-bits gehele getallen (wat betekent dat het tussen -2^63 en 2^63 - 1) ligt