Xin lỗi, tôi không hiểu câu hỏi của bạn ngay từ đầu và do đó cung cấp câu trả lời sai (cảm ơn cababunga đã chỉ ra điều này). Vì vậy, đây là một chính xác.
Mongoshell hỗ trợ các các loại dữ liệu khác nhau . Và nó cố gắng đoán kiểu dữ liệu của bạn khi bạn nhập. Vì vậy, bạn nhập số lớn của mình: 138548488276343678 . Lưu ý rằng nó lớn hơn thì 2 ^ 31-1 là giá trị lớn nhất cho số nguyên 32 bit. Vì vậy, nó coi nó như một phao và bởi vì các phao không được lưu trữ chính xác, nó sẽ sửa đổi nó một chút. Đây là lý do tại sao số được lưu trữ của bạn gần như giống nhau, nhưng khác nhau một chút (sự khác biệt này sẽ nhỏ hơn 8). Nhưng bạn muốn lưu trữ chính xác số này và mongo hỗ trợ số nguyên 64-bit (phù hợp với số nguyên của bạn).
Vì vậy, bạn cần xác định rằng bạn muốn lưu trữ nó dưới dạng số nguyên 64 bit . Bạn có thể thực hiện việc này theo cách sau:
db.a.insert({
bound:"latest",
id: NumberLong("138548488276343678"), // Note these "". I was not using them and the number was not stored correctly
complete:false
})
Sau đó, bạn có thể truy xuất tài liệu của mình db.a.find()
và nó sẽ chính xác. Lưu ý rằng rất nhiều trình điều khiển gặp sự cố tương tự và do đó bạn phải thông báo rõ ràng rằng bạn sẽ lưu chúng dưới dạng số nguyên 64 bit.
Nếu bạn không chỉ định _id
đối với tài liệu bạn đang tạo, mongodb tạo _id
lĩnh vực của nó. Bạn có thể đọc thêm một chút về _id
tại đây
và trong tài liệu chính thức
.
Nếu bạn có trường của riêng mình, bạn muốn sử dụng trường này làm _id
, thay vì viết id:138548488276343678
bạn nên viết _id : 138548488276343678
.
P.S. cũng bởi vì tôi thấy rằng bạn đang sử dụng các số khá lớn, hãy nhớ rằng các số nguyên trong mongodb được lưu trữ dưới dạng số nguyên 64 bit (có nghĩa là nó nằm trong khoảng từ -2 ^ 63 đến 2 ^ 63 - 1)