如何在嵌入式文档数组上使用 $geoNear?
How to use $geoNear on array of embedded documents?
我的文档结构如下:
{ agency_key : '',
route_id: '',
direction_id: '',
stops: [
{stop_id:15,
stop_lat: '',
stop_lon: '',
loc: [-83.118972, 42, 121567]
},
{...
}
]
}
我想在距集合中每个文档的给定距离内找到接近给定(纬度,经度)对的停靠点。我创建了二维索引。我尝试了 $unwind,然后是 $geoNear,但它说 $geoNear 只能在管道的第一阶段。
我试过这个:
db.tm_stops.aggregate([
... {
... $geoNear: { near: {coordinates: [-82.958841, 42.370114] }, distanceField: "stops.calculated", query: { agency_key: "DDOT"},
... includeLocs: "stops.loc" }
... }
... ])
我尝试了以下方法:
db.tm_stops.find({stops:{$near:[-82.958841, 42.370114], $maxDistance: 1 } } )
它抛出这个错误:
error: {
"$err" : "Unable to execute query: error processing query: ns=gtfs.tm_stops limit=0 skip=0\nTree: GEONEAR field=stops maxdist=1 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query",
"code" : 17007
我的 mongo 查询应该是什么?我需要从 Node.js 应用程序执行此操作,但我想先在 Mongo shell 中看到一些结果。提前致谢。
我终于完成了查询。我正在回答我自己的问题以供将来参考。
因为我使用的是 2d 索引而不是 2dsphere,所以我不必在 near 运算符中使用 coordinates
。此查询有效:
db.tm_stops.aggregate([
{
$geoNear:
{ near: [-82.958841, 42.370114] ,
distanceField: "stops.calculated",
query: { agency_key: "DDOT"},
includeLocs: "stops.loc" }
}
])
但是我发现,在returned文档中,我只能看到计算的距离和用于计算距离的(lon, lat)对。我真的无法 return 编辑用于计算的整个嵌入式文档。
如果我找到 return 整个嵌入式文档的方法,我会更新我的答案。
我的文档结构如下:
{ agency_key : '',
route_id: '',
direction_id: '',
stops: [
{stop_id:15,
stop_lat: '',
stop_lon: '',
loc: [-83.118972, 42, 121567]
},
{...
}
]
}
我想在距集合中每个文档的给定距离内找到接近给定(纬度,经度)对的停靠点。我创建了二维索引。我尝试了 $unwind,然后是 $geoNear,但它说 $geoNear 只能在管道的第一阶段。 我试过这个:
db.tm_stops.aggregate([
... {
... $geoNear: { near: {coordinates: [-82.958841, 42.370114] }, distanceField: "stops.calculated", query: { agency_key: "DDOT"},
... includeLocs: "stops.loc" }
... }
... ])
我尝试了以下方法:
db.tm_stops.find({stops:{$near:[-82.958841, 42.370114], $maxDistance: 1 } } )
它抛出这个错误:
error: {
"$err" : "Unable to execute query: error processing query: ns=gtfs.tm_stops limit=0 skip=0\nTree: GEONEAR field=stops maxdist=1 isNearSphere=0\nSort: {}\nProj: {}\n planner returned error: unable to find index for $geoNear query",
"code" : 17007
我的 mongo 查询应该是什么?我需要从 Node.js 应用程序执行此操作,但我想先在 Mongo shell 中看到一些结果。提前致谢。
我终于完成了查询。我正在回答我自己的问题以供将来参考。
因为我使用的是 2d 索引而不是 2dsphere,所以我不必在 near 运算符中使用 coordinates
。此查询有效:
db.tm_stops.aggregate([
{
$geoNear:
{ near: [-82.958841, 42.370114] ,
distanceField: "stops.calculated",
query: { agency_key: "DDOT"},
includeLocs: "stops.loc" }
}
])
但是我发现,在returned文档中,我只能看到计算的距离和用于计算距离的(lon, lat)对。我真的无法 return 编辑用于计算的整个嵌入式文档。
如果我找到 return 整个嵌入式文档的方法,我会更新我的答案。