Truy vấn chính xác để sử dụng ở đây sử dụng khung tổng hợp
có $geoNear
giai đoạn đường ống để hỗ trợ việc này. Đây cũng là nơi duy nhất bạn có thể "sắp xếp" theo nhiều khóa, không may là "không gian địa lý" $nearSphere
không có phép chiếu "meta" cho "khoảng cách" như $text
có một "điểm số".
Cũng là geoNear
lệnh cơ sở dữ liệu bạn đang sử dụng cũng không thể được sử dụng với "con trỏ" .sort()
theo cách đó.
db.paging.aggregate([
{ "$geoNear": {
"near": [106.606033,29.575897 ],
"spherical": true,
"distanceField": "distance",
"distanceMuliplier": 6371,
"maxDistance": 1/6371
}},
{ "$sort": { "distance": 1, "createdate": -1 } },
{ "$skip": ( 2-1 ) * 2 },
{ "$limit": 5 }
])
Điều đó tương đương với những gì bạn đang cố gắng làm.
Với khuôn khổ tổng hợp, bạn sử dụng "các nhà khai thác đường ống"
thay vì "sửa đổi con trỏ" để thực hiện những việc như $sort
, $skip
và $limit
. Ngoài ra những điều này phải theo thứ tự logic, trong khi các công cụ sửa đổi con trỏ thường hoạt động tốt.
Đó là một "đường ống", giống như "Đường ống Unix". |
Ngoài ra, hãy cẩn thận với "maxDistance" và "distanceMuliplier". Vì các tọa độ của bạn nằm trong "các cặp tọa độ kế thừa" chứ không phải GeoJSON
định dạng, sau đó khoảng cách được đo bằng "radian". Nếu bạn có dữ liệu vị trí được lưu trữ GeoJSON thì kết quả được trả về bằng "mét".