Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MongoDB地理空间,项目匹配多点_Php_Mongodb_Geospatial_Mongodb Geospatial - Fatal编程技术网

Php MongoDB地理空间,项目匹配多点

Php MongoDB地理空间,项目匹配多点,php,mongodb,geospatial,mongodb-geospatial,Php,Mongodb,Geospatial,Mongodb Geospatial,通过使用Aggregate的MongoDB$geoNear命令,我无法生成查询的maxDistance字段中的位置 array( '$geoNear' => array( 'near' => array( 'type' => "MultiPoint", 'coord

通过使用Aggregate的MongoDB$geoNear命令,我无法生成查询的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是否能够仅投影匹配的多点而不是存储的整个集合?

我能够解决这个问题:

  • 在$geoNear管道之后,添加一个$unwind stage来展开“includeLocs”数组,即{$unwind:'$locations.coordinates'}(确保展开坐标)
  • 为“$match”添加另一个阶段,该阶段使用$geoinGeospatial操作符,该字段专门标记为非预期坐标字段,即“$locations.coordinates”
  • 最后添加一个“$group”阶段,将所有内容连接回_id字段

  • 我想你需要一个库,比如,我猜
    union
    是使用的方法。@WernfriedDomscheit更喜欢使用一个库,我可以在每个坐标上运行距离计算,但我假设MongoDB的“includeLocs”将返回具体信息。。。文档有点模糊。