MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB Number Field ne sera pas inséré ou mis à jour avec le numéro que j'ai entré

Désolé, je n'ai pas compris votre question au début et j'ai donc donné une mauvaise réponse (merci cababunga de l'avoir signalé). En voici donc une correcte.

Mongoshell prend en charge différents types de données . Et il essaie de deviner votre type de données lorsque vous le saisissez. Alors vous entrez votre grand numéro :138548488276343678 . Notez qu'il est plus grand que 2^31-1 qui est le maximum pour un entier 32 bits. Il le traite donc comme un flottant et comme les flottants ne sont pas stockés avec précision, il le modifie un peu. C'est pourquoi votre numéro enregistré est presque le même, mais diffère un peu (cette différence sera inférieure à 8). Mais vous voulez stocker ce nombre précis et mongo prend en charge l'entier 64 bits (ce qui correspond à votre entier).

Vous devez donc spécifier que vous souhaitez le stocker en tant que 64bit integer . Vous pouvez le faire de la manière suivante :

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

Après cela, vous pouvez récupérer votre document db.a.find() et ce sera correct. Notez que de nombreux pilotes ont des problèmes similaires et vous devez donc indiquer explicitement que vous allez les enregistrer en tant qu'entier 64 bits.

Si vous ne spécifiez pas _id pour le document que vous créez, mongodb crée _id champ par lui-même. Vous pouvez en savoir un peu plus sur _id ici et dans la documentation officielle .

Si vous avez votre propre champ, que vous aimeriez utiliser comme _id , au lieu d'écrire id:138548488276343678 vous devez écrire _id : 138548488276343678 .

PS aussi parce que je vois que vous utilisez des nombres assez grands, gardez à l'esprit que les entiers dans mongodb sont stockés sous la forme Entiers 64 bits (ce qui signifie qu'il est compris entre -2^63 et 2^63 - 1)