sql >> Base de Datos >  >> NoSQL >> MongoDB

El campo de número de MongoDB no se insertará ni actualizará con el número que ingresé

Lo siento, no entendí tu pregunta al principio y, por lo tanto, proporcioné una respuesta incorrecta (gracias cababunga por señalar esto). Así que aquí hay uno correcto.

Mongoshell admite diferentes tipos de datos . Y trata de adivinar su tipo de datos cuando lo ingresa. Así que ingresas tu gran número:138548488276343678 . Tenga en cuenta que es más grande que 2^31-1, que es el máximo para un entero de 32 bits. Entonces lo trata como un flotante y debido a que los flotantes no se almacenan con precisión, lo modifica un poco. Es por eso que su número almacenado es casi el mismo, pero difiere un poco (esta diferencia será menos de 8). Pero desea almacenar este número preciso y Mongo admite enteros de 64 bits (que se ajustan a su entero).

Por lo tanto, debe especificar que desea almacenarlo como entero de 64 bits . Puede hacerlo de la siguiente manera:

db.a.insert({
  bound:"latest",
  id: NumberLong("138548488276343678"),  // Note these "". I was not using them and the number was not stored correctly
  complete:false
})

Después de esto, puede recuperar su documento db.a.find() y será correcto. Tenga en cuenta que muchos controladores tienen problemas similares y, por lo tanto, debe indicar explícitamente que los guardará como enteros de 64 bits.

Si no está especificando _id para el documento que está creando, mongodb crea _id campo por sí mismo. Puedes leer un poco más sobre _id aquí y en documentación oficial .

Si tiene su propio campo, que le gustaría usar como _id , en lugar de escribir id:138548488276343678 debe escribir _id : 138548488276343678 .

PD también porque veo que está usando números bastante grandes, tenga en cuenta que los números enteros en mongodb se almacenan como enteros de 64 bits (lo que significa que está entre -2^63 y 2^63 - 1)