fastadmin mongodb 处理及使用
1.需要安装mongodb,使用的宝塔,在软件商城中安装
2.安装mongodb的扩展,使用的宝塔\phpstudy环境,在需要的网站->php环境配置中安装monogdb的扩展
3.使用composer安装mongodb/mongodb库
composer require mongodb/mongodb
3.1)如果你安装php的mongodb扩展,使用
use MongoDB\Client;
new MongoDB\Client();
报错 致命错误: Class 'MongoDB\Client' not found 大概率是没有进行步骤3
如果安装了MongoDB的扩展,那么可以使用\MongoDB\Driver\Manager类作为底层驱动操作
4.常用方法,后续增加,此处不全
// MongoDB 连接(替换成你的)
$mongo = new MongoClient("mongodb://username:password@localhost:27017");// 或无认证 mongodb://localhost:27017
$db = $mongo->selectDatabase('your_database');// 数据库名
$collection = $db->selectCollection('charging_stations'); // 集合名
$metaCollection = $db->selectCollection('charging_meta'); // 存储元数据(上次哈希、更新时间)
$lastMeta = $metaCollection->findOne(['type' => 'evroam_hash']);// 获取上次哈希
$lastHash = $lastMeta['hash'] ?? '';
$collection->deleteMany([]); // 清空旧数据
$collection->insertMany($batch);// 批量插入(提高性能)
// 更新元数据哈希和时间
$metaCollection->updateOne(
['type' => 'evroam_hash'], //where条件
['$set' =>[ 'hash' => $newHash, 'updated_at' => new UTCDateTime(time() * 1000), 'total_sites' => count($allData) ]],//更新内容
['upsert' => true]//不存在是否插入
);
5常见错误
$mongo = new MongoDB\Client("mongodb://username:pwd@host:port?authSource=xxl"); 没有认证失败,但是取不到test 集合的数据,
new \MongoDB\Driver\Manager("mongodb://username:pwd@host:port/xxl");使用底层方法,可以取出数据
new MongoDB\Client("mongodb://username:pwd@host:port/?authSource=admin");如果使用,报错Authentication failed.
1.宝塔建的mongo库,认证信息在指定的数据库中,不存储在admin
2.另外两条时间太长忘记原因了。自己具体问题具体分析吧。大概率是参数原因,例如$mongo->xxl->test->find([])可以取到
网上找到一个封装底层的类,进行删除,单个直接执行删除正常,但是如果删除之后又其他操作,比如插入,则不报错,且未删除。
代码如下:
6.mongodb中有用来计算经纬度的吗?比如5公里范围内的充电站
$collection = $mongo->xxl->xxl_charging_sites;
$lon = 116.397428; // 中心经度
$lat = 39.90923; // 中心纬度
$radiusKm = 5;
// 方式2:$near + $maxDistance(推荐,简单)
$results = $collection->find([ 'location' => [ '$near' => [ '$geometry' => ['type' => 'Point', 'coordinates' => [$lon, $lat]], '$maxDistance' => $radiusKm * 1000 // 转米 ] ] ]);
foreach ($results as $station) {
print_r($station); // 输出充电站
}
mongo的内部结构为
[
{
"_id": "697af5c855670000cc002e02",
"chargingStationId": "c6df82b3-a8f2-4d05-a1d8-2037ea8f6ed7",
"location": { "type": "Point", "coordinates": [175.402147, -39.177432] },
"operator": "ChargeNet NZ",
// ... 其他字段
},
]

浙公网安备 33010602011771号