Không lưu trữ số điện thoại dưới dạng số nguyên. Lưu trữ chúng dưới dạng chuỗi. Khi bạn có một giá trị chỉ bao gồm các chữ số và trên đó số học là vô nghĩa, như mã zip, số tài khoản ngân hàng hoặc số điện thoại, thì việc lưu trữ nó dưới dạng số không có ý nghĩa gì nhiều.
- Như bạn đã nhận thấy, hầu như không thể tìm kiếm các số khi bạn muốn tìm kiếm một dãy chữ số, bởi vì các hệ thống máy tính lưu trữ các số nguyên ở dạng nhị phân, không phải ở dạng thập phân.
- Bạn không được có các số 0 ở đầu
- Khi số quá dài, bạn sẽ gặp phải hiện tượng tràn số nguyên hoặc bạn sẽ chuyển nó thành số dấu phẩy động (tùy theo quyết định của trình điều khiển MongoDB của bạn). Cả hai sẽ dẫn đến những hành vi rất kỳ lạ.
Nhân tiện, tất cả điều này áp dụng cho hầu hết mọi cơ sở dữ liệu, không chỉ MongoDB.
Nhưng nếu bạn hoàn toàn quyết tâm giữ chúng dưới dạng số, đây là hai điều bạn có thể làm.
- Khi số chữ số không xác định được cố định, bạn có thể sử dụng
$gt
và$lt
toán tử để tìm kiếm một phạm vi.contactphone:{$gt:5556000, $lt:5556999}
sẽ tìm tất cả các số có mẫu5556xxx
. - Bạn có thể sử dụng
$where
-query sử dụng hàm javascript để chuyển đổi nội bộ mọi số thành một chuỗi và sau đó áp dụng biểu thức chính quy của bạn cho chuỗi đó.$where: "String(this.contactphone).match(/^4832/) != null"
. Tôi hy vọng bạn không có nhiều tài liệu trong cơ sở dữ liệu của mình vì khi bạn làm như vậy, truy vấn này có thể mất một lúc.