Mongodb-在嵌套JSON对象中查找GeoNear
我需要使用此数据结构获取某个点附近最近的位置:Mongodb-在嵌套JSON对象中查找GeoNear,json,mongodb,geolocation,mongodb-query,Json,Mongodb,Geolocation,Mongodb Query,我需要使用此数据结构获取某个点附近最近的位置: [ { "data_id": "127", "actual_data": [ { "id": "220", "value": "shaul" }, { "id": "221", "value": "323
[
{
"data_id": "127",
"actual_data": [
{
"id": "220",
"value": "shaul"
},
{
"id": "221",
"value": "3234324"
},
{
"id": "222",
"value": {
"lngalt": [
13.7572225,
-124.0429047
],
"street_number": null,
"political": null,
"country": null,
}
},
{
"id": "223",
"value": "dqqqf1222fs3d7ddd77@Dcc11cS2112s.com"
},
{
"id": "224",
"value": "123123"
},
{
"id": "225",
"value": "lala1"
},
....
},
{
"data_id": "133",
"actual_data": [
{
"id": "260",
"value": {
"lngalt": [
1.7572225,
32.0429047
],
"street_number": null,
"political": null,
"country": null,
}
},
{
"id": "261",
"value": -122.25
}
],
}
]
我使用以下查询来获取所需的内容:
{
"actual_data": {
"$elemMatch": {
"id": "260",
"value.lngalt": {
"$near": {
"$geometry": {
"type": "Point",
"coordinates": [
-73.9667,
40.78
]
},
"$minDistance": 1000,
"$maxDistance": 5000
}
}
}
}
}
但在查询之后,我得到了“无法规范化查询:BadValue geoNear必须是顶级表达式”(错误代码:17287)。这很奇怪,因为当我在没有$near但只有$elemMatch的情况下进行查询以获得具有特定值的确切对象时,我确实得到了正确的结果
谢谢
解决了强>
对于将来的重构,我使用$geoinsin代替$near函数。因此,我的查询如下所示:
{
"actual_data": {
"$elemMatch": {
"id": "260",
"value.lnglat": {
"$geoWithin": {
"$centerSphere": [
[
-71.07651880000003,
42.353068
],
0.001
]
}
}
}
}
}
和平
$elemMatch
不支持嵌套在内部的$near
。还要注意的是,匹配将针对文档,而不是数组的元素,因此我认为,即使您的查询有效,也不会给出您所期望的结果。您是否试图在文档中的点中找到最近的点?或者,在其各个点中,最接近的文档(与其他文档相比)?我尝试细化包含ID等于260且靠近特定坐标的子对象的整个文档。因此,如果ID不是260,则不会返回。