Chương này giới thiệu một trong những hàm truy vấn hình học của MongoDB, đo lường dữ liệu tài liệu dựa trên khoảng cách.
Các kịch bản ứng dụng: tìm kiếm các cửa hàng gần đây và tìm người gần đây.
Hướng dẫn tiên quyết
Định dạng Lưu trữ Dữ liệu Địa lý của MongoDB
Các yêu cầu tiên quyết cho việc truy vấn dữ liệu dựa trên khoảng cách như sau:
- Mỗi dữ liệu tài liệu chứa một trường lưu trữ dữ liệu tọa độ, ví dụ: trường
location
lưu trữ tọa độ của một cửa hàng. - Tạo một chỉ mục không gian 2dsphere hoặc 2d.
Toán tử $near
MongoDB sử dụng toán tử $near để truy vấn dữ liệu tài liệu dựa trên khoảng cách.
Định dạng:
{
<trường vị trí>: { // Trường lưu trữ dữ liệu tọa độ
$near: {
$geometry: { // Thiết lập tọa độ tham chiếu để so sánh
type: "Point" ,
coordinates: [ kinh độ , vĩ độ ]
},
$maxDistance: khoảng cách tối đa, tính bằng mét,
$minDistance: khoảng cách tối thiểu, tính bằng mét
}
}
}
Lưu ý: Dữ liệu trả về từ truy vấn $near được sắp xếp từ gần nhất đến xa nhất.
Ví dụ
Giả sử bộ sưu tập shop
lưu trữ dữ liệu cửa hàng, trong đó trường location
lưu trữ tọa độ của mỗi cửa hàng. Truy vấn sau tìm cửa hàng gần nhất với tôi (khoảng cách tối thiểu 1000 mét, khoảng cách tối đa 5000 mét).
db.shop.find(
{
location:
{ $near :
{
$geometry: { type: "Point", coordinates: [ -73.9667, 40.78 ] }, // Tọa độ của tôi
$minDistance: 1000, // Khoảng cách tối thiểu
$maxDistance: 5000 // Khoảng cách tối đa
}
}
}
)