Przepraszamy, na początku nie zrozumiałem twojego pytania i dlatego podałem złą odpowiedź (dziękuję cababunga za wskazanie tego). Oto właściwy.
Mongoshell obsługuje różne typy danych . I próbuje odgadnąć twój typ danych, kiedy je wprowadzasz. Więc wpisujesz swój duży numer:138548488276343678 . Zauważ, że jest większe niż 2^31-1, które jest maksimum dla 32-bitowej liczby całkowitej. Traktuje to więc jako pływak, a ponieważ pływaki nie są dokładnie przechowywane, trochę go modyfikuje. Z tego powodu Twój zapisany numer jest prawie taki sam, ale różni się trochę (ta różnica będzie mniejsza niż 8). Ale chcesz przechowywać tę liczbę dokładnie, a mongo obsługuje 64-bitową liczbę całkowitą (która pasuje do Twojej liczby całkowitej).
Musisz więc określić, że chcesz go przechowywać jako 64-bitową liczbę całkowitą . Możesz to zrobić w następujący sposób:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Następnie możesz pobrać swój dokument db.a.find()
i będzie dobrze. Zauważ, że wiele sterowników ma podobne problemy i dlatego musisz wyraźnie powiedzieć, że zamierzasz je zapisać jako 64-bitową liczbę całkowitą.
Jeśli nie określasz _id
dla dokumentu, który tworzysz, mongodb tworzy _id
pole samot. Możesz przeczytać trochę więcej o _id
tutaj
oraz w oficjalnej dokumentacji
.
Jeśli masz własne pole, które chcesz wykorzystać jako _id
, zamiast pisać id:138548488276343678
powinieneś wpisać _id : 138548488276343678
.
PS ponieważ widzę, że używasz dość dużych liczb, pamiętaj, że liczby całkowite w mongodb są przechowywane jako 64-bitowe liczby całkowite (co oznacza, że wynosi od -2^63 do 2^63 - 1)