Scusa, non ho capito la tua domanda all'inizio e quindi ho fornito una risposta sbagliata (grazie cababunga per averlo sottolineato). Quindi eccone uno corretto.
Mongoshell supporta diversi tipi di dati . E cerca di indovinare il tuo tipo di dati quando lo inserisci. Quindi inserisci il tuo numero grande:1385484888276343678 . Nota che è maggiore di 2^31-1 che è il massimo per un intero a 32 bit. Quindi lo tratta come un float e poiché i float non vengono memorizzati con precisione, lo modifica un po'. Questo è il motivo per cui il tuo numero memorizzato è quasi lo stesso, ma differisce leggermente (questa differenza sarà inferiore a 8). Ma vuoi memorizzare questo numero in modo preciso e mongo supporta un intero a 64 bit (che si adatta al tuo intero).
Quindi è necessario specificare che si desidera memorizzarlo come numero intero a 64 bit . Puoi farlo nel modo seguente:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Dopodiché puoi recuperare il tuo documento db.a.find()
e sarà corretto. Nota che molti driver hanno problemi simili e quindi devi dire esplicitamente che li salverai come intero a 64 bit.
Se non stai specificando _id
per il documento che stai creando, mongodb crea _id
campo da solo Puoi leggere un po' di più su _id
qui
e nella documentazione ufficiale
.
Se hai il tuo campo, che vorresti fosse usato come _id
, invece di scrivere id:138548488276343678
dovresti scrivere _id : 138548488276343678
.
PS anche perché vedo che stai usando numeri abbastanza grandi, tieni presente che gli interi in mongodb sono archiviati come Interi a 64 bit (il che significa che è compreso tra -2^63 e 2^63 - 1)