MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB Number Field non verrà inserito o aggiornato con il numero che ho inserito

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)