Правилната заявка за използване тук използва рамката за агрегиране
който има $geoNear
етап на тръбопровод, за да помогне с това. Това е и единственото място, където можете да „сортирате“ по множество ключове, тъй като за съжаление „геопространственият“ $nearSphere
няма "мета" проекция за "разстояние" като $text
има "резултат".
Също така geoNear
Командата за база данни, която използвате, също не може да се използва с "курсор" .sort()
или по този начин.
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 }
])
Това е еквивалентът на това, което се опитвате да направите.
С рамката за агрегиране използвате "тръбопроводни оператори"
вместо "модификатори на курсора", за да правите неща като $sort
, $skip
и $limit
. Също и тезатрябва да бъде в логически ред, докато модификаторите на курсора обикновено го правят.
Това е "тръбопровод", точно като "Unix pipe". |
Също така внимавайте с "maxDistance" и "distanceMuliplier". Тъй като вашите координати са в „наследени двойки координати“, а не в GeoJSON
формат, тогава разстоянията се измерват в "радиани". Ако имате GeoJSON съхранени данни за местоположение, тогава резултатът се връща в "метри".