MongoDB地理空间,项目匹配多点
MongoDB Geospatial, project matching multi points
通过带聚合的 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 阶段来展开 "includeLocs" 数组,即 {$unwind: '$locations.coordinates'}(确保展开坐标)。
- 使用 $geoWithin 地理空间运算符为“$match”添加另一个阶段,其中字段专门标记为展开的坐标字段,即“$locations.coordinates”。
- 最后添加一个“$group”阶段以将所有内容连接回 _id 字段。
通过带聚合的 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 阶段来展开 "includeLocs" 数组,即 {$unwind: '$locations.coordinates'}(确保展开坐标)。
- 使用 $geoWithin 地理空间运算符为“$match”添加另一个阶段,其中字段专门标记为展开的坐标字段,即“$locations.coordinates”。
- 最后添加一个“$group”阶段以将所有内容连接回 _id 字段。