Maaf, saya tidak mengerti pertanyaan Anda di awal dan karena itu memberikan jawaban yang salah (terima kasih cababunga untuk menunjukkan ini). Jadi ini yang benar.
Mongoshell mendukung tipe data . Dan ia mencoba menebak tipe data Anda saat Anda memasukkannya. Jadi, masukkan angka besar Anda:138548488276343678 . Perhatikan bahwa ini lebih besar dari 2^31-1 yang merupakan maksimum untuk bilangan bulat 32-bit. Jadi itu memperlakukannya sebagai pelampung dan karena pelampung tidak disimpan dengan tepat, itu memodifikasinya sedikit. Inilah sebabnya mengapa nomor yang Anda simpan hampir sama, tetapi sedikit berbeda (perbedaan ini akan kurang dari 8). Tetapi Anda ingin menyimpan nomor ini dengan tepat dan mongo mendukung bilangan bulat 64-bit (yang sesuai dengan bilangan bulat Anda).
Jadi, Anda perlu menentukan bahwa Anda ingin menyimpannya sebagai integer 64bit . Anda dapat melakukannya dengan cara berikut:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Setelah ini, Anda dapat mengambil dokumen Anda db.a.find()
dan itu akan benar. Perhatikan bahwa banyak driver memiliki masalah serupa dan oleh karena itu Anda harus secara eksplisit memberi tahu bahwa Anda akan menyimpannya sebagai bilangan bulat 64bit.
Jika Anda tidak menentukan _id
untuk dokumen yang Anda buat, mongodb membuat _id
lapangan dengan sendirinya. Anda dapat membaca lebih banyak tentang _id
di sini
dan dalam dokumentasi resmi
.
Jika Anda memiliki bidang sendiri, yang ingin Anda gunakan sebagai _id
, alih-alih menulis id:138548488276343678
anda harus menulis _id : 138548488276343678
.
P.S. juga karena saya melihat bahwa Anda menggunakan angka yang cukup besar, perlu diingat bahwa bilangan bulat di mongodb disimpan sebagai bilangan bulat 64-bit (artinya antara -2^63 sampai 2^63 - 1)