使用命令创建数据库:
use user
使用命令创建集合:
db.createCollection(user)
使用命令创建2dsphere索引:
db.user.createIndex({location: "2dsphere"})
PHP代码插入经纬度数据:
public function uploadMongoDBLocation()
{
$document = [
'name' => '张三',
'location' => [
(float)115.036545,
(float)36.313916,
],
];
$manager = new \MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$bulk = new \MongoDB\Driver\BulkWrite;
$bulk->insert($document); // 可连续使用多个insert
$writeConcern = new \MongoDB\Driver\WriteConcern(\MongoDB\Driver\WriteConcern::MAJORITY, 1000);/
$res = $manager->executeBulkWrite('user.user', $bulk, $writeConcern);
return $res;
}
PHP代码查询距离:
注意:这里使用的command根据版本不同,用法可能会有区别,这里使用的MongoDB版本是3.6.5
public function findMongoDBLocation()
{
$document = [
'geoNear' => 'user',
'near' => [
'type' => 'Point',
'coordinates' => [(float)'115.042725', (float)'36.312956'],
],
'spherical' => true,
'minDistance' => 0,
'maxDistance' => 100000,
'num' => 1000
];
$command = new \MongoDB\Driver\Command($document);
$manager = new \MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$cursor = $manager->executeCommand('user', $command);
$items = [];
foreach ($cursor as $document) {
$total = count($document->results);
if ($total > 0) {
foreach ($document->results as $result) {
$item = json_decode(json_encode($result->obj), true);
$item['distance'] = intval($result->dis);
unset($item['_id']);
$items[] = $item;
}
}
}
return $items;
}