MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O campo de número do MongoDB não será inserido ou atualizado com o número que eu inserir


Desculpe, não entendi sua pergunta no início e, portanto, forneci a resposta errada (obrigado cababunga por apontar isso). Então aqui está um correto.

O Mongoshell suporta diferentes tipos de dados . E tenta adivinhar seu tipo de dados quando você o insere. Então você insere seu número grande:138548488276343678 . Observe que é maior que 2^31-1, que é o máximo para um inteiro de 32 bits. Então, ele o trata como um float e, como os floats não são armazenados com precisão, ele o modifica um pouco. É por isso que seu número armazenado é quase o mesmo, mas difere um pouco (essa diferença será menor que 8). Mas você deseja armazenar esse número com precisão e o mongo suporta inteiro de 64 bits (que se encaixa no seu inteiro).

Portanto, você precisa especificar que deseja armazená-lo como inteiro de 64 bits . Você pode fazer isso da seguinte maneira:
db.a.insert({
  bound:"latest",
  id: NumberLong("138548488276343678"),  // Note these "". I was not using them and the number was not stored correctly
  complete:false
})

Depois disso, você pode recuperar seu documento db.a.find() e estará correto. Observe que muitos drivers têm problemas semelhantes e, portanto, você precisa dizer explicitamente que vai salvá-los como um número inteiro de 64 bits.

Se você não estiver especificando _id para o documento que você está criando, mongodb cria _id campo por si só. Você pode ler um pouco mais sobre _id aqui e na documentação oficial .

Se você tiver seu próprio campo, que gostaria de ser usado como _id , em vez de escrever id:138548488276343678 você deve escrever _id : 138548488276343678 .

P.S. também porque vejo que você está usando números muito grandes, lembre-se de que os números inteiros no mongodb são armazenados como inteiros de 64 bits (o que significa que está entre -2^63 a 2^63 - 1)