Запрос рядом, сортировка, затем пейджинг - PullRequest
2 голосов
/ 27 марта 2011

Я использую геопространственный поиск "в ближнем" в MongoDB (используя драйвер C #), чтобы вернуться домой в пределах 25 миль от заданного широты / долготы. Это возвращает дома, отсортированные по близости к широте / долготе и прекрасно работает.

Тем не менее, я хочу добавить сортировку (в других областях, таких как цены на жилье) и подкачку страниц, и вот где я застреваю. Для правильной работы необходимо выяснить, какие дома находятся в пределах 25 миль от широты / долготы, затем отсортировать эти результаты (скажем, на основе цены), а затем взять «страницу» из 10 результатов.

Ниже приведено то, что у меня есть, проблема в том, что он берет страницу результатов (на основе сортировки по близости), а затем сортирует эту страницу из 10 результатов по тому, что я установил в «SetSortOrder», а не сортирует всю результат рядом с широтой / долготой, поэтому каждая страница из 10 результатов сортируется сама по себе.

var coordinates = find.GetCoordinates();
var near = Query.Near("Coordinates", coordinates.Latitude,
    coordinates.Longitude,
    find.GetRadiansAway(), false);
var query = Collection().Find(near); 
query.Skip = find.GetSkip();
query.Limit = find.GetLimit();
query.SetSortOrder(new string[] { "Price" });
var results = query.ToArray();

1 Ответ

0 голосов
/ 27 марта 2011

Это правильное поведение, потому что $ около по умолчанию возвращает результат, отсортированный по расстоянию. И сортировка выполняется внутри оператора $ near, поэтому вы не можете его изменить.

db.places.find ({loc: {$ near: [50,50]}})

Приведенный выше запрос находит ближайший указывает на (50,50) и возвращает их отсортировано по расстоянию (нет необходимости для дополнительного параметра сортировки)

Итак, в вашем примере Price это второе поле сортировки, которое сортирует данные в результатах, отсортированных по расстоянию.

Workgraund загружает весь результат Query.Near, а затем сортирует его по полю на клиенте.

...