Förlåt, jag förstod inte din fråga i början och gav därför fel svar (tack cababunga för att du påpekade detta). Så här är en korrekt.
Mongoshell stöder olika datatyper . Och den försöker gissa din datatyp när du anger den. Så du anger ditt stora nummer:138548488276343678 . Observera att det är större än 2^31-1 vilket är maxvärdet för 32-bitars heltal. Så det behandlar det som ett flöte och eftersom flöten inte lagras exakt, modifierar det det lite. Det är därför ditt lagrade nummer är nästan detsamma, men skiljer sig lite (denna skillnad kommer att vara mindre än 8). Men du vill lagra detta nummer exakt och mongo stöder 64-bitars heltal (som passar ditt heltal).
Så du måste ange att du vill lagra den som 64-bitars heltal . Du kan göra detta på följande sätt:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Efter detta kan du hämta ditt dokument db.a.find()
och det kommer att stämma. Observera att många drivrutiner har liknande problem och därför måste du uttryckligen tala om att du kommer att spara dem som 64-bitars heltal.
Om du inte anger _id
för dokumentet du skapar skapar mongodb _id
fält av sig självt. Du kan läsa lite mer om _id
här
och i officiell dokumentation
.
Om du har ett eget fält, som du vill ska användas som _id
, istället för att skriva id:138548488276343678
du bör skriva _id : 138548488276343678
.
P.S. även för att jag ser att du använder ganska stora tal, kom ihåg att heltal i mongodb lagras som 64-bitars heltal (vilket betyder att det är mellan -2^63 till 2^63 - 1)