Моя ситуация: У меня есть коллекция с адресами в моей базе данных, и я хочу показать их на картах 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, но я не могу найти способ объединить эти два запроса.
Может кто-нибудь сказать мне, что я делаю неправильно или как я могу достичь своей цели?
Спасибо, я тоже пробовал, как вы и предлагали, все еще никаких результатов. –
@BasvandenWijngaard странный. Если вы уверены, что запросы имеют пересекающиеся документы, это должно сработать. И [вы не можете] (https://jira.mongodb.org/browse/SERVER-4572) использовать геопространственные запросы в $ и операторе. Не уверен, что это то же самое для 'implicit и', как указано выше. – ma08