Я новичок в MongoDB, и я прыгаю прямо в глубокую воду геопространственных запросов. Я заметил, что команда geoNear
и оператор агрегации $geoNear
могут выводить расчетное расстояние (используя distanceField
).MongoDB - выходное расстояние без сортировки
Эта команда также предлагает сортировать результаты по расстоянию.
Есть ли способ вывести расстояние без сортировки по расстоянию? т. е. использовать некоторый оператор проектирования. Это можно сделать, используя map
с функцией javascript для вычисления расстояния вручную, но, похоже, есть встроенная функция вычисления расстояния, которая должна быть намного более эффективной. Кроме того, представляется неэффективным использовать оператора $geoNear
, а затем (в конвейере агрегации) принести результаты ... правильно?
Благодаря
Что было бы более эффективным: 'db.collection.find (query) .sort (sort) .map (function (d) {... return-d-with-calculate-distance ...})' или 'db.collection.aggregate ([{$ geoNear: {distanceField:" ... ", ...}}, {$ match: query}, {$ sort: sort}])'? У вас есть другой способ добавить расчетное расстояние к результатам? – Oren
Я не знаю, не тестируя его, но, как правило, я думаю, что скомпилированные функции в сочетании с индексами будут бить map-reduce. –
Я удивлен, что нет возможности: 'db.collection.find (query, projection-that-added-a-distance-field)' - функция вычисления расстояния уже реализована! – Oren