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

MongoDB Number Field vil ikke indsætte eller opdatere med det nummer, jeg indtastede

Beklager, jeg forstod ikke dit spørgsmål i begyndelsen og gav derfor forkert svar (tak cababunga for at påpege dette). Så her er en korrekt.

Mongoshell understøtter forskellige datatyper . Og den forsøger at gætte din datatype, når du indtaster den. Så du indtaster dit store nummer:138548488276343678 . Bemærk, at det er større end 2^31-1, hvilket er maksimum for 32-bit heltal. Så det behandler det som en flyder, og fordi flydere ikke opbevares præcist, modificerer det det en lille smule. Dette er grunden til, at dit lagrede nummer er næsten det samme, men afviger en lille smule (denne forskel vil være mindre end 8). Men du vil gemme dette tal præcist og mongo understøtter 64-bit heltal (som passer til dit heltal).

Så du skal angive, at du vil gemme det som 64bit heltal . Du kan gøre dette på følgende måde:

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

Herefter kan du hente dit dokument db.a.find() og det vil være korrekt. Bemærk, at mange drivere har lignende problemer, og derfor skal du udtrykkeligt fortælle, at du vil gemme dem som 64bit heltal.

Hvis du ikke angiver _id for det dokument, du opretter, opretter mongodb _id felt af sig selv. Du kan læse lidt mere om _id her og i officiel dokumentation .

Hvis du har dit eget felt, som du gerne vil have brugt som _id , i stedet for at skrive id:138548488276343678 du skal skrive _id : 138548488276343678 .

P.S. også fordi jeg kan se, at du bruger ret store tal, skal du huske på, at heltal i mongodb er gemt som 64-bit heltal (hvilket betyder, at det er mellem -2^63 til 2^63 - 1)




  1. Opsætning af Redis på Webfaction

  2. Indsæt json-fil i mongodb

  3. Hvordan bruger jeg en geospatial forespørgsel i 2.1 MongoDB C#-driveren?

  4. Liste dynamiske attributter i en Mongoid-model