Mon go $ near - Как добавить второй запрос? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть маршрут, который выполняет поиск по $ в моей базе данных mon go. Возвращает документы с геотегом в пределах 100 миль. Этот запрос ищет в каждом документе «bandLocation». У меня есть второе поле, которое индексируется, называется bandTour - оно содержит несколько других географических местоположений в том же формате. Я хочу, чтобы запрос также включал эти местоположения, но безуспешно - Как мне добавить второй запрос?

Вот мой маршрут - Если «bandLocation» - единственный запрос, он работает ... Как бы я добавить "bandTour"?

   router.get('/allbands/:lng/:lat',   (req, res) => {
    quoteGenerator.find(
        {
        "bandLocation.geometry":
            { $near :
                {
                $geometry: { 
                    type: "Point",  
                    coordinates: [parseFloat(req.params.lng), parseFloat(req.params.lat)] 
                },
                $maxDistance: 160934,
            }
            },
            "bandTour.geometry":
            { $near :
                {
                $geometry: { 
                    type: "Point",  
                    coordinates: [parseFloat(req.params.lng), parseFloat(req.params.lat)] 
                },
                $maxDistance: 160934,
            }
            }
        })
.then(
                function(bands){
                    res.send(bands)
                }
            )
        });

1 Ответ

0 голосов
/ 27 апреля 2020

MongoDB поддерживает только одно гео-выражение, например $near в запросе. Хотя агрегация поддерживает гео-запросы, она поддерживается только в качестве первого этапа конвейера, поэтому в этом случае агрегирование не является решением.

Вам необходимо реализовать это как 2 запроса, а затем объединить результаты. Поскольку ваш пример запроса требует совпадения обоих местоположений, вы можете использовать поиск с $near на bandLocation, проецируя только поле _id. Затем используйте возвращенные значения _id для создания второго запроса, который проверяет на _id:{$in:[_array of ids_]} вместе с $near on bandTour

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...