MongoDB Geospatial, проект, соответствующий нескольким точкам - PullRequest
0 голосов
/ 21 марта 2020

С помощью команды MongoDB $ geoNear с Aggregate я не могу сгенерировать местоположения, которые находятся в запрашиваемом поле maxDistance.

        array(
            '$geoNear'          => array(
                'near'             => array(
                    'type'            => "MultiPoint",
                    'coordinates'     => [ 
                        $city["geo"]["coordinates"][0], 
                        $city["geo"]["coordinates"][1] 
                    ],
                ),
                "distanceField"    => "distance",
                "maxDistance"      => 1*1609.34,
                "includeLocs"      => "locations",
                "spherical"        => true,
                "query" => array(
                    "status" => true
                ),
                "limit" => 500
            ),
        ),

Состояния документации для использования includeLocs " указывает поле вывода, которое определяет местоположение, используемое для расчета расстояния. Этот параметр полезен, когда поле местоположения содержит несколько местоположений . ", однако поле includeLocs включает все местоположения с несколькими точками.

Имеет ли mongodb возможность проецировать только совпадающие мультипункты, а не весь сохраненный набор?

1 Ответ

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

Мне удалось решить эту проблему:

  1. После конвейера $ geoNear добавьте этап $ unwind для размотки массива includeLocs, т.е. {$ unwind: '$ location.coordinates'} ( Убедитесь, что вы разматываете координаты).
  2. Добавьте еще один этап для $ match с геопространственным оператором $ geoWithin, где поле специально помечено для поля с неиндуцированными координатами, т. Е. '$ Location.coordinates'.
  3. Наконец, добавьте этап '$ group', чтобы соединить все обратно с полем _id.
...