Съжалявам, не разбрах въпроса ви в началото и затова дадох грешен отговор (благодаря на cababunga, че посочихте това). Ето един правилен.
Mongoshell поддържа различни типове данни . И се опитва да отгатне вашия тип данни, когато го въведете. Въведете големия си номер:138548488276343678 . Имайте предвид, че е по-голям от 2^31-1, което е максимумът за 32-битово цяло число. Така че го третира като плувка и тъй като плаващите не се съхраняват точно, тя го модифицира малко. Ето защо вашият запаметен номер е почти същият, но се различава с малко (тази разлика ще бъде по-малка от 8). Но вие искате да съхраните това число точно и mongo да поддържа 64-битово цяло число (което отговаря на вашето цяло число).
Така че трябва да посочите, че искате да го съхраните като 64-битово цяло число . Можете да направите това по следния начин:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
След това можете да извлечете вашия документ db.a.find()
и ще е правилно. Имайте предвид, че много драйвери имат подобни проблеми и затова трябва изрично да кажете, че ще ги запазите като 64-битово цяло число.
Ако не посочвате _id
за документа, който създавате, mongodb създава _id
поле само по себе си. Можете да прочетете малко повече за _id
тук
и в официална документация
.
Ако имате собствено поле, което искате да използвате като _id
, вместо да пишете id:138548488276343678
трябва да напишете _id : 138548488276343678
.
P.S. също тъй като виждам, че използвате доста големи числа, имайте предвид, че целите числа в mongodb се съхраняват като 64-битови цели числа (което означава, че е между -2^63 до 2^63 - 1)