我爱编程网小编给大家带来了php7 mongodb 扩展 真的很差吗相关文章,一起来看一下吧。
本文目录一览:

php 远程连接Mongodb问题
<?php //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017,如果端口是27017,端口可以省略 $m = new Mongo(); // 选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m->selectDB("comedy"); $db = $m->comedy; //选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用 $collection = $db->collection; $db->selectCollection("collection"); //添加一个元素 $obj = array( "title" => "Calvin and Hobbes-".date('i:s'), "author" => "Bill Watterson" ); //将$obj 添加到$collection 集合中 $collection->insert($obj); //添加另一个元素 $obj = array( "title" => "XKCD-".date('i:s'), "online" => true ); $collection->insert($obj); //查询所有的记录 $cursor = $collection->find(); //遍历所有集合中的文档 foreach ($cursor as $obj) { echo $obj["title"] . "<br />\n"; } //删除所有数据 //$collection->remove(); //删除 name 为hm //$collection->remove(array('name'=>'hm')); //断开MongoDB连接 $m->close(); ?>
你可以去后盾人平台看看,里面的东西不错
我爱编程网
php7 mongodb 扩展 真的很差吗
MongoDB\Driver\Manager::executeBulkWrite
这玩意还配置了一个巨大的类库来配合调用:就是这个:
,纯粹是脱裤子放P,多此一举,本来原生扩展就已经巨长、巨难用,还配一个根本没有简化任何代码的库有什么意义?甚至于调用这个类库比原生的名字更长、更啰嗦,而且多了一层封装就多一次bug机会。
这个库文件总共63个,看看,如果你随便写个脚本访问一下mongodb,还得包含63个文件,我TM整个项目都没有63个文件好不好?这些个写惯了java的没事就老老实实写java,都跑来写php,php是要解析执行的,又不像jvm那么编译优化执行,搞那么多文件,不影响执行速度吗?真是狗屎,所以完全不推荐用这个狗屎库。
但是这个扩展最奇怪的就是文档超级简陋,根本不能获得任何有价值的信息,所以只能靠摸索来了。
下面是我用到的由MongoClient迁移到MongoDB\Driver的差异点。
MongoClient插入或更新是同样的代码:
(new MongoClient())->{$db}->{$collection}->save($arr);
// 这个$arr数组可以直接含有 "_id" 索引来指定 mongodb文档的_id值,就这么简单粗暴,这才是php啊!
MongoDB\Driver,插入和更新需要区分:
$mongo = new MongoDB\Driver\Manager();
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$data = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query([]), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED))->toArray();
if (empty($data[0])) { // 确定不存在,插入
$bulk->insert($arr);
} else { // 否者更新
$bulk->update([], array('$set' => $arr)); // $arr同样是刚才的数组
}
// 还没完,还要执行下一步:db.collection要替换成实际的数据库、集合名
$result = $mongo->executeBulkWrite('db.collection', $bulk, new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000));
// 返回插入或更新是否成功:
$ok = $result->getInsertedCount() || $result->getModifiedCount() ? 1 : 0;
// 真是够了!
查询一条记录:
MongoClient:
(new MongoClient())->{$db}->{$collection}->findOne(['_id' => $id]);
MongoDB\Driver:
$mongo = new MongoDB\Driver\Manager();
$result = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query(['_id'=>$id], []), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
// 返回的$result是一个对象,需要手动转换成数组。
查询数量时候,需要注意:
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo-executeCommand($db, new MongoDB\Driver\Command($arr), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED));
// 这里$cursor是一个游标。需要注意$arr里的字段:
$arr = ['count'=>$collection, 'query'=>$query]; // 这里count必须排在前面,位置反了直接报异常。
查询结果集:
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query($arr, $opts), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
//注意,这里的 $arr和 $opts;
$arr = ['_id'=> ['$in'=> $ids] ]; // 根据id数组获取集合
$opts = ['limit'=> $limit, 'skip'=> $skip ]; // 不推荐
// 这里在传递$limit和$skip的时候,最好先转成整数,不然不生效:
$opts = ['limit'=> (int) $limit, 'skip'=> (int) $skip ]; // 推荐写法。
// 写到这里,让人怀疑是不是在用php了,怎么还需要这样的类型转换。字符串整数都不行!
基本就这样,推荐自己封装一个简单的MongoDB\Driver,而不是使用那个巨大无比的库、也不推荐直接用原生
关于 PHP 启动 MongoDb 找不到指定模块问题
我爱编程网(https://www.52biancheng.com)小编还为大家带来关于 PHP 启动 MongoDb 找不到指定模块问题的相关内容。
在进行PHP与MongoDB的集成过程中,我遇到了一些挑战,特别是与MongoDB的本地交互。在尝试将用户行为记录存储到MongoDB中并使用Spark进行协同过滤时,我遭遇了找不到指定模块的错误。这主要是由于在本地安装了扩展,但在启动过程中发现找不到模块。在PHP实例化过程中,还报出MongoClient类以及一些函数不存在的错误。为解决这些问题,下面是一系列步骤和建议,帮助您顺利进行PHP与MongoDB的集成。
在开始之前,请确保您的环境满足以下要求:
-
Windows10操作系统
-
PHP版本为7.4
-
MongoDB服务器版本为4.4.14
-
安装了php_mongodb-1.12.1-7.4-nts-vc15-x64扩展
在进行MongoDB的安装时,您需要下载MongoDB服务器和php_mongodb扩展。此外,为简化操作,我推荐使用Navicat for MongoDB进行数据库管理。
在遇到找不到指定模块php_mongodb的问题时,正确添加扩展是关键步骤。除了php_mongodb.dll,您还需要复制php_mongodb.pdb文件到php安装目录的ext文件夹下。随后,在php.ini配置文件中添加`extension=php_mongodb.dll`,并重启服务器或重新加载php.ini配置。通过执行`php -m`命令或访问phpinfo()页面,检查扩展是否已成功加载。
对于MongoClient类不存在的问题,这可能是因为您使用的是旧版本的php_mongo扩展。新版本中,这类操作可能已改用其他方式实现。为解决此问题,您可以查看`get_declared_classes()`输出,以了解扩展中预设的函数和类。通过这种方式,您可以发现扩展提供的新方法或函数,确保代码兼容性。
在操作MongoDB时,使用适当的工具可以提高效率和减少错误。MongoDB服务器提供服务的启动和管理,而Navicat for MongoDB则方便您进行数据库的连接、管理及数据操作。
为了演示与MongoDB的交互,以下是几个基本操作的代码示例:
-
查询:通过MongoDB的查询接口,您可以检索特定的记录。
-
插入:使用MongoDB的插入功能,可以将用户行为记录存储到数据库中。
-
批量插入:为了提高效率,您可以一次性插入多条记录,简化数据管理流程。
通过遵循上述步骤和建议,您可以顺利完成PHP与MongoDB的集成,确保用户行为记录的可靠存储及协同过滤任务的高效执行。
以上就是我爱编程网小编给大家带来的php7 mongodb 扩展 真的很差吗,希望能对大家有所帮助。更多相关文章关注我爱编程网:
www.52biancheng.com免责声明:文章内容来自网络,如有侵权请及时联系删除。