MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Trong Mongo sự khác biệt giữa $ near và $ nearSphere là gì?

Từ khóa là sphere để phân biệt giữa $ gần $ nearSphere .

Như bạn đã biết, $nearSphere được nêu để tính toán khoảng cách bằng cách sử dụng hình học hình cầu. Điều này liên quan đến Earth phép chiếu bản đồ ( biến dạng ). Nơi chỉ mục MongoDB 2d dựa trên Descartes chỉ mục MongoDB 2dsphere dựa trên Trắc địa .

Lý thuyết là đủ, chúng ta hãy sử dụng một số ví dụ. Giả sử chúng ta có hai tài liệu như sau:

db.map.insert({ "_id": "Westfield London", "location": [ -0.22157, 51.507176 ] });
db.map.insert({ "_id": "Green Lanes Shopping Centre", "location": [ -0.098092, 51.576198 ] });

Hướng dẫn sử dụng cho cả hai toán tử chỉ định rằng chúng ta có thể sử dụng:

Chỉ mục:2dsphere, Truy vấn:GeoJSON

db.map.createIndex({"location": "2dsphere"});

db.map.find({"location":{"$nearSphere":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ] }}}});

db.map.find({"location":{"$near":{"$geometry":{"type":"Point", "coordinates":[ -0.127748, 51.507333 ]}}}});

Trong trường hợp này, cả hai truy vấn sẽ trả về cùng một kết quả vì chỉ mục được lưu trữ trong 2dsphere .

Kết quả:

[ /* $nearSphere */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]

Chỉ mục:2d, Truy vấn:Tọa độ kế thừa

db.map.createIndex({"location": "2d"});

db.map.find({"location":{"$nearSphere":[ -0.127748, 51.507333 ]}});

db.map.find({"location":{"$near":[ -0.127748, 51.507333 ]}});

Đây là nơi sự khác biệt xảy ra, kết quả cho $nearSphere được tính toán theo hình cầu bất chấp chỉ mục, trong khi $near được tính toán trong phép chiếu phẳng.

Kết quả:

[ /* $nearSphere */
    {"_id" : "Westfield London"},
    {"_id" : "Green Lanes Shopping Centre"}
]
[ /* $near */
    {"_id" : "Green Lanes Shopping Centre"},
    {"_id" : "Westfield London"}
]

Xem gist:JS test script của ví dụ trên. Điều này đã được kiểm tra bằng cách sử dụng MongoDB v3.4.4.

Ngoài ra, hãy xem Truy vấn và chỉ mục không gian địa lý .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meteor Subscribe không cập nhật thứ tự sắp xếp của bộ sưu tập

  2. Cách tìm một chuỗi con trong một trường trong Mongodb

  3. Kiến thức cơ bản về triển khai bộ bản sao MongoDB và các đoạn bằng con rối

  4. Lọc mảng bằng toán tử $ in trong giai đoạn $ project

  5. khớp với các ký tự utf8 nhiềubyte trong biểu thức chính quy mongodb