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
          }
       }
   }
)