当前位置:首页 > 技术分析 > 正文内容

关于 PHP 启动 MongoDb 找不到指定模块问题

ruisui882周前 (04-15)技术分析12

前言:

最近有一个小 demo,需要通过 PHP 将用户行为记录储存到 MongoDB,再用 Spark 做协同过滤。由于以前处理跨语言交互是通过消息中间件,这次本地使用 MongoDB 却弄出了几个问题。首先是本地安装了扩展,启动时报找不到模块错误,再个时 PHP 进行的实例化使用时报 MongoClient 和一些函数不存在。最后也推荐一些方便快捷的 MongoDB 图形化工具。

环境:

1. Windows10

2. PHP7.4

3. MongoDB 4.4.14 Server

5. 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 下载

问题:

1. 找不到指定模块 php_mongodb

PHP 中添加扩展 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 () 查看扩展里预设的函数

工具使用:

1. MongoDB Server

(1). 启动服务

2. 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;
    }

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3475.html

分享给朋友:

“关于 PHP 启动 MongoDb 找不到指定模块问题” 的相关文章

机动车检测站收费管理系统

机动车检测站收费管理系统headerfooter《机动车检测站收费管理系统》是一款适用于中小型机动车检测站收费管理、打印票据。主要包括收费打印、统计查询、辅助字典等功能。本管理系统多处具有快速辅助录入功能,操作简单,易学、易用;处理功能高效强大,是协助您的好帮手!主要功能:1.收费管理:收费打印、今...

总结了Vue3的七种组件通信方式,别再说不会组件通信了

写在前面本篇文章是全部采用的<script setup>这种组合式API写法,相对于选项式来说,组合式API这种写法更加自由,具体可以参考Vue文档对两种方式的描述。本篇文章将介绍如下七种组件通信方式:propsemitv-modelrefsprovide/injecteventBusv...

代码管理-9-gitlab的使用和设置

gitlab使用1、外观设置完成后保存,返回登录页面查看关于注册,有些公司是不允许打开的,,有些人数非常多的公司就需要打开注册的功能,让人员自己注册,我们来给他特定的权限就可以,毕竟人非常多的时候还由我们来给她们注册就非常不现实了,工作量会很大2、自动注册3、组&用户&项目创建组设置组名称、描述等创...

前后端分离自动化运维平台开发

运维平台采用前后端分离:前端vue,框架vue-element-admin;后端python,框架django-rest-framework.目前运维平台模块如下:1、 CMDB管理应用管理、环境管理、开发语言管理、产品项目管理、资产管理2、 构建发布持续构建、持续部署、Jar工程依赖构建3、 容器...

祸害阿里云宕机3小时的IO HANG究竟是什么?

本文来自微信公号“CSDN”(ID:CSDNnews),作者 | 王知无, 责编| 郭 芮。2019年3月3日凌晨,微博炸锅,有网友反映说阿里云疑似出现宕机,华北很多互联网公司受到暴击伤害,APP、网站全部瘫痪,我自己的朋友圈和微信群里也有好友反馈,刚刚从被窝被叫起来去修Bug,结果发现服务器登不上...

使用cgroup限制进程资源

这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...