2013-03-26 1 views
0

В настоящее время я пытаюсь найти всех пользователей, которые живут в любом из списка местоположений (этот список местоположений может быть большим, поэтому выполнение нескольких запросов, чем объединение на сервере, сторона, не обязательно идеальна).Mongo - запрос сразу нескольких местоположений

В случае использования, например, было бы найти всех пользователей, которые живут в пределах 2 миль от любой церкви в моем нынешнем городе, с учетом списка координат для этих церквей.

Прямо сейчас, это следующий запрос место работы:

db.users.count({ location: { $within: { $centerSphere: [ [-84.330984, 33.8615], 2/3959 ] } } }) 

, а также:

db.users.count({location : { $near : [ -84.330984 , 33.8615 ] , $maxDistance : 2/69 } }) 

Однако, я хотел бы иметь возможность подсчитать количество пользователей, которые живут в диапазон различных местоположений. то есть что-то вроде:

db.users.count({ $or: [{ location: { $within: { $centerSphere: [ [-84.330984, 33.8615], 2/3959 ] } } },{ location: { $within: { $centerSphere: [ [-85.331122, 34.97832], 2/3959 ] } } } ] }) 

Прямо сейчас, когда я запускаю этот запрос, Монго дает документированную ошибку:

Tue Mar 26 17:24:22 uncaught exception: count failed: { 
"errmsg" : "exception: $or may not contain 'special' query", 
"code" : 13291, 
"ok" : 0 
} 

Из этой ошибки и открытый JIRA билет (https://jira.mongodb.org/browse/SERVER-3984), Монго в настоящее время ограничено из будучи в состоянии выполнить несколько запросов местоположения с помощью оператора $ или (или $ all), поэтому я не могу привязать запросы местоположения.

Есть ли передовая практика или обход для этого? Опять же, я бы предпочел не иметь отдельный запрос для каждого местоположения, чем объединить их; хотя я понимаю, что это единственный вариант.

В настоящее время я использую Mongo 2.2.3, но у меня нет проблем с обновлением до 2.4, если он разрешит эту дилемму.

Благодаря

+0

Как Рэй сказал, что это еще не реализовано, и поэтому вам нужно использовать карту Уменьшить функцию (которая работает на сервере) или использовать Aggregation Framework (гео запросы поддерживаются с 2,4) См. Это http://docs.mongodb.org/manual/release-notes/2.4/#improvements-to-the-aggregation-framework И это примеры: http://stackoverflow.com/a/15209920/ 728287 –

ответ

1

Если вы farmiliar с JavaScript, вы можете использовать MapReduce для достижения этой цели.

Однако существуют два метода: $ near и $ centerSphere, необходимые для сборки, и вы не можете выполнить mapreduce, превышающий 1000 записей.

Поскольку mongoDB ограничивает для $ или оператора, это первая идея, пересекающая мой разум, чтобы решить эту проблему.

http://docs.mongodb.org/manual/applications/map-reduce/

 Смежные вопросы

  • Нет связанных вопросов^_^