Пн goose: использование нескольких запросов $ geoNear в одной агрегации - PullRequest
0 голосов
/ 26 января 2020

Моя схема выглядит примерно так:

...
...
pointA: GeoJSON point
pointB: GeoJSON point
...
...

Я передаю два параметра: геопункт (x) и массив геопунктов (y) и хочу вернуть только те результаты, которые соответствуют следующим критериям:

-> Расстояние между x и pointA не должно превышать 1000 м.

-> Любая точка массива y должна l ie в пределах 100 м от pointB.

К сожалению, похоже, что MongoDB не поддерживает несколько запросов $ geoNear, конвейеризованных вместе

Следующий код

Collection
.aggregate([
            {
                $geoNear: {
                    distanceField: "calculatedDistance",
                    spherical: true,
                    maxDistance: 1000,
                    near: x,
                    key: "pointA.coordinates"
                }
            },
            {
                $or: [
                         {
                            $geoNear: {
                                spherical: true,
                                maxDistance: 100,
                                key: "pointB.coordinates",
                                near: {
                                    type: "Point",
                                    coordinates: y[0]
                                },
                                distanceField: "calculatedDistanceB"
                            }
                         },
                         ...
                         ...
                         ...
                         ...
                         {
                            $geoNear: {
                                spherical: true,
                                maxDistance: 100,
                                key: "pointB.coordinates",
                                near: {
                                    type: "Point",
                                    coordinates: y[i]
                                },
                                distanceField: "calculatedDistanceB"
                            }
                         }
                     ]
            }
        ])

Выдает ошибку, говорящую $geoNear is only valid as the first stage in a pipeline.

Как я могу выполнить несколько геопространственных проверок в одном запросе?

...