惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
B
Blog RSS Feed
C
Check Point Blog
D
Docker
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
量子位
有赞技术团队
有赞技术团队
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
M
MIT News - Artificial intelligence
B
Blog
阮一峰的网络日志
阮一峰的网络日志
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
月光博客
月光博客

博客园 - tying

mysql的知识扩展 <论语> fastadmin配合宝塔面板造成cors error 跨域问题 一个小并发,引起的数据错误 小型在线聊天功能 fastadmin数据库操作 技术文章分享 shopxo学习过程 fastadmin 開發好文章 fastadmin常用前端组件 2024-11-13关于监管特殊停牌炒作股票事件--兼此事件复盘 深入浅出的讲解mysql优化 关于gruop by,where和order by ,以及一些mysql的探讨 fastadmin使用感受 fastadmin命令行模式--command mac 下Fastadmin 框架搭建 Mac电脑php环境搭建 关于php+mysql性能在实际工作中的应用实例 yii2的单元测试 d8的入口文件及引申
fastadmin mongodb 处理及使用
tying · 2026-01-30 · via 博客园 - tying

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([])可以取到

网上找到一个封装底层的类,进行删除,单个直接执行删除正常,但是如果删除之后又其他操作,比如插入,则不报错,且未删除。

代码如下:

$site = Mongodb::getMongo()->table('xxl_charging_sites');

 $site->delete();

改进为

 $site->where([])->delete();//需要增加where条件,否则会有防误删机制

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",
     // ... 其他字段
  },
]