2013-03-21 30 views
8

Dường như mongodb cung cấp hai chức năng tương tự cho các truy vấn không gian địa lý - $near$geoNear. Theo tài liệu mongomongodb geoNear vs gần

Lệnh geoNear cung cấp giải pháp thay thế cho toán tử gần $. Trong ngoài chức năng của $ near, geoNear trả về thông tin chẩn đoán bổ sung .

Có vẻ như geoNear cung cấp bộ siêu chức năng near. Ví dụ: near dường như chỉ trả về 100 tài liệu gần nhất, trong khi geoNear cho phép bạn chỉ định mức tối đa. Có lý do nào để sử dụng near thay vì geoNear không? Là một trong những hiệu quả hơn khác?

Trả lời

15

Hiệu quả phải giống hệt nhau.

geoNear 's hạn chế lớn là như một lệnh nó có thể trả về một kết quả thiết lập kích thước tài liệu tối đa như tất cả các tài liệu phù hợp được trả về trong một tài liệu kết quả duy nhất. Nó cũng yêu cầu một trường khoảng cách được thêm vào mỗi tài liệu kết quả có thể hoặc có thể không phải là một vấn đề tùy thuộc vào cách sử dụng của bạn.

$near là toán tử truy vấn để kết quả có thể lớn hơn một tài liệu duy nhất (chúng vẫn được trả lại trong một phản hồi đơn chứ không phải một tài liệu). Bạn cũng có thể đặt số lượng tài liệu tối đa thông qua giới hạn truy vấn().

Tôi có xu hướng khuyên người dùng nên gắn bó với $near trừ khi họ cần số diagnostics (ví dụ: khoảng cách hoặc vị trí phù hợp) từ lệnh geonear.

+0

Cảm ơn bạn đã giải thích rõ. Một điều không rõ ràng là các tài liệu cho gần nói rằng nó trả về 100 tài liệu, nhưng trong thử nghiệm của tôi với mongo 2.4, điều đó dường như không đúng. Nó dường như trả lại tất cả các tài liệu trừ khi giới hạn được sử dụng. Bạn có biết hành vi nên là gì không? –

+0

Câu trả lời ngắn: Không, tôi không biết hành vi 2.4 mong đợi là gì. Theo vé Jira này (https: //jira.mongodb.org/browse/SERVER-5236) họ vẫn chưa sửa các kết quả "tiến bộ" từ các truy vấn gần $ nên nó sẽ dừng lại ở một thời điểm nào đó. Những gì bạn có thể nhìn thấy là truy vấn chỉ trả lại càng nhiều kết quả càng tốt trong lô đầu tiên nhưng cuối cùng kích thước của lô đó sẽ bị cạn kiệt. Rob. –

+0

ít nhất nó dường như không bị giới hạn đến 100, mà tôi nghĩ là như vậy. cảm ơn đã giúp đỡ. –

1

Các văn bản 100 hạn chế với GeoNear là hành vi mặc định nhưng bạn chỉ có thể thiết lập các num lĩnh vực như mô tả trên các tài liệu MongoDB (http://docs.mongodb.org/manual/reference/command/geoNear/)

mặc định được thiết lập đến 100 nhưng bạn có thể thiết lập nhiều hơn nữa. Thật không may skip tham số là mất tích cho thời điểm (xem https://jira.mongodb.org/browse/SERVER-3925)

+0

Tôi nghĩ gần cũng mặc định 100 nhưng điều đó dường như không phải là trường hợp –

1

Đây là sự khác biệt lớn: -

  1. $ geoNear cũng cung cấp cho bạn khoảng cách từ điểm nhưng $ gần lệnh thì không.

  2. $ geoNear lệnh yêu cầu các bộ sưu tập có nhiều nhất là chỉ có một chỉ số 2d và/hoặc chỉ có một 2dsphere chỉ số trong khi các nhà khai thác truy vấn không gian địa lý như $ gần và $ geoWithin bộ sưu tập giấy phép có nhiều chỉ số không gian địa lý. Điều này là do trong lệnh $ geoNear không có tùy chọn để chỉ định trường mà bạn muốn tìm kiếm, trong đó như trong lệnh $ near bạn có thể chỉ định tên trường.

Các vấn đề liên quan