PHP使用mongoclient简单操作mongodb数据库示例


Posted in PHP onFebruary 08, 2019

本文实例讲述了PHP使用mongoclient简单操作mongodb数据库。分享给大家供大家参考,具体如下:

最好回到《mongodb shell基础命令【进阶篇】》,再来看这里的内容,否则有些东西我讲的比较笼统。

好了,不废话了,直接贴代码吧,别害怕看代码,基本每行都写了注释了

<!-- 
1、本文采用mongoClient类来实现mongodb的简单操作,
2、需要事先熟悉《mongodb基础命令——进阶篇》的内容
3、其中更新数据部分只给出了一个$set的例子,但是跟操作命令是一样的,注意理解与尝试
4、在最下来有对函数进行简单的介绍,其中的一些内容会在本人学习完后续章节后回来补充的
 -->
<?php
try {
  // 连接mongodb数据库
  $mongo = new MongoClient();
  // 选择数据库
  $db_name=$mongo->test;
  // 或者这样也可以
  // $db_name=$mongo->selectDB('test');
  // 选择集合
  $collection_name=$db_name->student;
  // 或者和上面一样
  // $collection_name=$$db_name->selectCollection('collection_name');
  echo '<pre>';
  // 查看全部dbs
  $dbs=$mongo->listDBs();
  // var_dump($dbs);
  $collections=$db_name->listCollections();
  // var_dump($collections);
  // 定义被插入的数据,而且php的数组形式与json格式类似,所以很容易理解
  $input = array(
   'name' =>'yang' ,
   'sex'=>'man',
   'sorce' => array(
   'math' =>60 ,
   'pe'=>30 
   )
   );
  // 插入数据,$result会显示插入数据的结果
  // insert的第二个参数内容请看--函数1
  // $result=$collection_name->insert($input);
  // var_dump($result);
  // 查询单条数据,跟shell命令里的findOne()一样
  $findOne=$collection_name->findOne();
  // var_dump($findOne);
  // 查找全部数据,记住一点,find()函数的返回值不是跟findOne()函数一样的数组。而是一个对象,所以不能直接
  // 打印出来,至于如何读取其中的内容,可以使用foreach循环
  $find=$collection_name->find();
  // 可以跟mongo shell中一样为find()函数传递第一个筛选参数
  $situation = array(
   'name' => 'yang', 
   );
  // 选择返回的字段内容
  $field = array('sorce' => 1 );
  // 详细解释看--函数2
  $find=$collection_name->find($situation,$field);
  // while ($each=$find->getNext()) {
  // var_dump($each);
  // }
  $sort=$collection_name->find()->sort(array('math' => -1, ));
  $limit=$collection_name->find()->sort(array('math' => -1, ))->limit(2);
  $skip=$collection_name->find()->sort(array('math' => -1, ))->skip(2);
  $count=$collection_name->find()->sort(array('math' => -1, ))->count();
  // echo $count;
  // foreach ($skip as $value) {
  // var_dump($value);
  // }
  // 条件操作符的使用
  $situation2=array(
   // 注意这里字段的设置跟shell中一样
   'item.quantity'=>array('$gt'=>5)
   );
  $gt=$db_name->orders->find($situation2);
  /**********************************************数据的更新*******************************************/
  // 注意,接下来这段代码会更新整个匹配到的文档,就跟update没有使用$set一样
  // 详情查看函数3
  $update=$db_name->orders->update(
   array('_class'=>'com.mongo.model.Orders'),
   array('_class'=>'hello world')
   );
  // 注意$set的位置,是不是与shell命令中一致
  $update=$db_name->orders->update(
   array('_class'=>'com.mongo.model.Orders'),
   array('$set'=>array('_class'=>'hello world'))
   );
  // 从这里可以看到,如果会shell命令的话,那么这一节的重点就是将shell命令与php数组之间的相互转化了
  /**********************************************数据的删除*******************************************/
  // 删除集合中的数据
  $remove=$db_name->orders->remove(array('_class'=>'com.mongo.model.Orders'));
  // 删除整个集合
  $db_name->orders->drop();
  // 本来还有一些集合之间使用DBRef联查以及GRidFS的内容的,但是那个还是等以后要用了再来补充好了
} catch (MongoConnectionException $e) {
  echo $e->getMessage();
}
?>

其中几个函数的解释

--------------------------函数1--------------------

插入数据函数 insert

$mongo->$db_name->$collection_name->insert($input.$options)

$option中的参数以及默认值

$option=array(
'fsync'=> false,
'j'  => false,
'w'  => 1,
'wtimeout'=>10000,
'timeout'=>10000
)

'fsync' 

这个参数设置为真时,php将会告诉mongodb将当前写入数据直接写入硬盘,即使还没有全部从php文档写入mongodb数据库

'j'

这个参数设置为真市,php将会告诉mongodb在数据插入成功之前就将本次修改写入日志

'w'

如果设置成0,写操作将不会被确认,在这里还不会深究

'wtimeout'

跟上面的'w'绑定使用的,后面会介绍的

'timeout'

客户端等待服务器响应的超时时间,也就是如果php的服务器等待mongodb数据库写入数据的时间,如果超过了timeout规定的时间,就算本次写入失败

---------------------------函数2--------------------

筛选数据函数 find

$mongo->$db_name->$collection_name->find($situation,$field)

$situation可以为空,表示返回全部数据,也可以是一个数组,表示筛选条件,就跟mongodb命令一样
$field也可以为空,表示返回全部字段,也可以跟第一个参数一样,传入数组,规定返回的字段

注意,即使上面使用$field限制返回字段,_id字段还是会自动返回的

---------------------------函数3--------------------

更新数据 update

$mongo->$db_name->$collection_name->update($criteria,$update,$option)

结合shell命令就很好理解了
$criteria 表示筛选进行更新的文档
$update 就是要更新后的数据

$option=array(
'upsert'=>false,
'multiple'=>true,
'fsync'=>false,
'w'=>1,
'wtimeout'=>10000,
'timeout'=>10000
)

后几个的作用在函数1里讲过了就不赘述了,upsert为true表示如果当前文档存在就更新,不存在就创建,multiple为真表示匹配该条件的文档都会被更新,即不止更新满足条件的一个文档。

---------------------------函数3--------------------

删除数据 remove

$mongo->$db_name->$collection_name->remove($remove,$option)

$remove表示跟find()第一个参数一样的筛选条件

$option=array(
'justOne'=>false,
'fsync'=>false,
'w'=>1,
'j'=>false,
'wtimeout'=>10000,
'timeout'=>10000
)

上面有的我就不赘述了,justOne根据名字来,就一个,如果为true表示就删除一个匹配$remove的文档

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
php批量上传的实现代码
Jun 09 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
Jan 03 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
php通过smtp邮件验证登陆的方法
May 11 PHP
Yii2如何批量添加数据
May 17 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
laravel中的一些简单实用功能
Nov 03 PHP
php中file_get_contents()函数用法实例
Feb 21 PHP
PHP实现微信公众号验证Token的示例代码
Dec 16 PHP
Centos7安装swoole扩展操作示例
Mar 26 PHP
PHP实现字符串大小写转函数的功能实例
Feb 06 #PHP
PHP addcslashes()函数讲解
Feb 03 #PHP
PHP addslashes()函数讲解
Feb 03 #PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 #PHP
PHP simplexml_load_file()函数讲解
Feb 03 #PHP
PHP simplexml_import_dom()函数讲解
Feb 03 #PHP
PHP count()函数讲解
Feb 03 #PHP
You might like
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
Vue2.0 http请求以及loading展示实例
2018/03/06 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python实现文件的备份流程详解
2019/06/18 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
django admin 添加自定义链接方式
2020/03/11 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
opencv 实现特定颜色线条提取与定位操作
2020/06/02 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
岗位职责风险防控
2014/02/18 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
PyTorch的Debug指南
2021/05/07 Python
SQL SERVER触发器详解
2022/02/24 SQL Server