无法通过 $near 查询从 Mongodb 检索 lat,long 的记录
Unable to retrieve records from Mongodb for lat,long with $near query
我对使用 mongodb 进行地理空间数据搜索还很陌生。我需要检索靠近我提供查询的纬度的英国邮政编码(基于经纬度的结果)。我的 mongodb 查询如下:
$mongoPostcode = MongoDbConnector::getCollection("postcodes");
$query = array(
'location' => array(
'$near' => array(
'latitude' => 57.14270109,
'longitude' => -2.093014619,
'$maxDistance' => 15 / 111.12 // 1 degree is approximately 111.12 kilometers. 15 km of 111.12 would be 15/111.12
)
)
);
$nearByPostcodeData = $mongoPostcode->find($query);
我的 mongo 的原始记录条目如下所示:
{
"_id": {
"$oid": "56ced2e6cffa1906847b6868"
},
"postcode": "AB11 8RQ",
"location": {
"latitude": 57.13597762,
"longitude": -2.072114784
},
"timestamp": 1454601532,
"active_status": 1
}
但是当我搜索它时 returns 我出现以下错误:
Fatal error: Uncaught exception 'MongoCursorException' with message 'localhost:27017: Unable to execute query: error processing query: ns=sampleproject.postcodes limit=0 skip=0 Tree: GEONEAR field=location maxdist=0.134989 isNearSphere=1 Sort: {} Proj: {} planner returned error: unable to find index for $geoNear query' in C:\xampp\htdocs\sampleproject\files\php\searchByPostCode.php:35 Stack trace: #0 C:\xampp\htdocs\sampleproject\files\php\searchByPostCode.php(35): MongoCursor->rewind() #1 {main} thrown in C:\xampp\htdocs\sampleproject\files\php\searchByPostCode.php on line 35
示例数据建模中是否缺少任何内容或者是查询问题?
您需要创建一个特殊的索引。 2D Sphere index
db.postcodes.createIndex( { "location" : "2dsphere" } )
编辑
您可以修改 collection 以使用米而不是弧度进行查询。
{
"_id": { "$oid": "56ced2e6cffa1906847b6868" },
"postcode": "AB11 8RQ",
"location": {
"type": "Point",
"coordinates": [
-2.072114784, // Longitude
57.13597762 // Latitude
]
},
"timestamp": 1454601532,
"active_status": 1
}
您的查询将如下所示:
$query = array(
'location' => array(
'$near' => array(
'latitude' => 57.14270109,
'longitude' => -2.093014619,
'$maxDistance' => 1000 // 1000 meters )
)
)
);
这需要重塑您的整个 collection。详情可见here.
我对使用 mongodb 进行地理空间数据搜索还很陌生。我需要检索靠近我提供查询的纬度的英国邮政编码(基于经纬度的结果)。我的 mongodb 查询如下:
$mongoPostcode = MongoDbConnector::getCollection("postcodes");
$query = array(
'location' => array(
'$near' => array(
'latitude' => 57.14270109,
'longitude' => -2.093014619,
'$maxDistance' => 15 / 111.12 // 1 degree is approximately 111.12 kilometers. 15 km of 111.12 would be 15/111.12
)
)
);
$nearByPostcodeData = $mongoPostcode->find($query);
我的 mongo 的原始记录条目如下所示:
{
"_id": {
"$oid": "56ced2e6cffa1906847b6868"
},
"postcode": "AB11 8RQ",
"location": {
"latitude": 57.13597762,
"longitude": -2.072114784
},
"timestamp": 1454601532,
"active_status": 1
}
但是当我搜索它时 returns 我出现以下错误:
Fatal error: Uncaught exception 'MongoCursorException' with message 'localhost:27017: Unable to execute query: error processing query: ns=sampleproject.postcodes limit=0 skip=0 Tree: GEONEAR field=location maxdist=0.134989 isNearSphere=1 Sort: {} Proj: {} planner returned error: unable to find index for $geoNear query' in C:\xampp\htdocs\sampleproject\files\php\searchByPostCode.php:35 Stack trace: #0 C:\xampp\htdocs\sampleproject\files\php\searchByPostCode.php(35): MongoCursor->rewind() #1 {main} thrown in C:\xampp\htdocs\sampleproject\files\php\searchByPostCode.php on line 35
示例数据建模中是否缺少任何内容或者是查询问题?
您需要创建一个特殊的索引。 2D Sphere index
db.postcodes.createIndex( { "location" : "2dsphere" } )
编辑
您可以修改 collection 以使用米而不是弧度进行查询。
{
"_id": { "$oid": "56ced2e6cffa1906847b6868" },
"postcode": "AB11 8RQ",
"location": {
"type": "Point",
"coordinates": [
-2.072114784, // Longitude
57.13597762 // Latitude
]
},
"timestamp": 1454601532,
"active_status": 1
}
您的查询将如下所示:
$query = array(
'location' => array(
'$near' => array(
'latitude' => 57.14270109,
'longitude' => -2.093014619,
'$maxDistance' => 1000 // 1000 meters )
)
)
);
这需要重塑您的整个 collection。详情可见here.