共计 1885 个字符,预计需要花费 5 分钟才能阅读完成。
前言:
最近有一个小 demo,须要通过 PHP 将用户行为记录贮存到 MongoDB,再用 Spark 做协同过滤。因为以前解决跨语言交互是通过消息中间件,这次本地应用 MongoDB 却弄出了几个问题。首先是本地装置了扩大,启动时报找不到模块谬误,再个时 PHP 进行的实例化应用时报 MongoClient 和一些函数不存在。最初也举荐一些方便快捷的 MongoDB 图形化工具。
环境:
- Windows10
- PHP7.4
- MongoDB 4.4.14 Server
- php_mongodb-1.12.1-7.4-nts-vc15-x64
装置:
1. MongoDB Server 下载
2. php_mongodb-1.12.1-7.4-nts-vc15-x64 下载
3. navicat for mongodb 下载
问题:
- 找不到指定模块 php_mongodbPHP 中增加扩大 php_mongodb 不正确,除了须要 php_mongodb.dll 还要 php_mongodb.pdb 复制到 php 装置目录下的 ext 中
最初在 php.ini 增加 extension=php_mongodb.dll,重启完后查看 php -m 或者浏览器中查看 phpinfo ()
2. MongoClient 类不存在起因是这个是旧版本 php_mongo 扩大提供的类,新版本是通过前面演示代码的形式,如果不晓得扩大提供的新办法或函数能够通过一下形式查看。
(1). get_declared_classes () 查看扩大里预设的函数
工具应用:
- MongoDB Server
(1). 启动服务
- Navicat for MongoDB
(1). 连贯服务
代码演示:
1. 查问
public function testMongoDbQuery()
{$manager = new \MongoDB\Driver\Manager("mongodb://localhost:27017"); | |
$filter = ['x' => ['$gt' => 0]]; | |
$options = ['projection' => ['_id' => 0], | |
'sort' => ['x' => -1], | |
]; | |
// 查问数据 | |
$query = new \MongoDB\Driver\Query($filter, $options); | |
$cursor = $manager->executeQuery('test.sites', $query); | |
foreach ($cursor as $document) {print_r($document); | |
} | |
}2. 插入 public function testMongoDbInsert() | |
{$manager = new \MongoDB\Driver\Manager("mongodb://localhost:27017"); | |
$bulk = new \MongoDB\Driver\BulkWrite; | |
// mongoDb 默认存在一个自增长的字符串 ID | |
$document = [ | |
'_id' => new \MongoDB\BSON\ObjectID, | |
'videoId' => mt_rand(1, 99999), | |
'userId' => mt_rand(1, 9999), | |
'score' => floatval(mt_rand(5,100)), | |
'date' => time()]; | |
$bulk->insert($document); | |
$res = $manager->executeBulkWrite('tanhua.recommend_video_20191001', $bulk); | |
return $res; | |
}3. 批量插入 public function testMongoDbBulk() | |
{//return get_declared_classes(); | |
$manager = new \MongoDB\Driver\Manager("mongodb://localhost:27017"); | |
$bulk = new \MongoDB\Driver\BulkWrite; | |
$bulk->insert(['x' => 1, 'name'=>'tenent', 'url' => 'http://www.runoob.com']); | |
$bulk->insert(['x' => 2, 'name'=>'Google', 'url' => 'http://www.google.com']); | |
$bulk->insert(['x' => 3, 'name'=>'taobao', 'url' => 'http://www.taobao.com']); | |
$res = $manager->executeBulkWrite('test.sites', $bulk); | |
return $res; | |
} |
正文完