2014-08-07 1 views
0

Моя ситуация: У меня есть коллекция с адресами в моей базе данных, и я хочу показать их на картах Google в качестве маркера, но только в пределах координат отображаемой карты и только в том случае, если идентификатор адреса находится в моем списке с идентификаторами, которые должны отображаться.

У меня есть 2 отдельных запроса, которые отлично работают сами по себе.

// Find within ID's 
db.addresses.find({ 
    _id : { $in: [ ObjectId("ID1"), ObjectId("ID2") ] } 
}) 

Этот запрос возвращает 2 адреса с указанными идентификаторами, как и ожидалось.

// Find within area 
db.addresses.find({ 
    location : { $within: { $box : [ [ 51.498761244224,4.3004231168717 ], [ 51.494099036558,4.2811004831284 ]] } } 
}) 

Этот запрос возвращает около 15 адресов, которые также включают в себя адрес с ID1, который находится в пределах заданных координат.

Я хочу объединить эти 2 запроса в 1, который возвращает только адреса с указанными идентификаторами, находящимися в данных координатах.

Я попытался следующие:

// Find within area within ids 
db.addresses.find({ 
    $and : [ 
     {location : { $within: { $box : [ [ 51.498761244224,4.3004231168717 ], [ 51.494099036558,4.2811004831284 ]] } } }, 
     {_id : { $in: [ ObjectId("ID1"), ObjectId("ID2") ] } } 
    ] 
}) 

Это не возвращает ни одной строки. Я ожидал 1 адрес, один с ID1.

Я попытался выполнить поиск в Google, но я не могу найти способ объединить эти два запроса.

Может кто-нибудь сказать мне, что я делаю неправильно или как я могу достичь своей цели?

ответ

0

Не нужно использовать $ и оператора. Вы не можете использовать геопространственные запросы в операторе $ и. Проверьте this issue. Попробуйте это:

db.addresses.find({ 
     location : { $within: { $box : [ [ 51.498761244224,4.3004231168717 ], [ 51.494099036558,4.2811004831284 ]] } } , 
     _id : { $in: [ ObjectId("ID1"), ObjectId("ID2") ] } 
}) 

Не уверен, что если вышеупомянутая проблема затрагивает implicit and мы используем здесь.

+0

Спасибо, я тоже пробовал, как вы и предлагали, все еще никаких результатов. –

+0

@BasvandenWijngaard странный. Если вы уверены, что запросы имеют пересекающиеся документы, это должно сработать. И [вы не можете] (https://jira.mongodb.org/browse/SERVER-4572) использовать геопространственные запросы в $ и операторе. Не уверен, что это то же самое для 'implicit и', как указано выше. – ma08