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 相关文章推荐
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
PHP 面向对象 final类与final方法
May 05 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
php使用base64加密解密图片示例分享
Jan 20 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
May 06 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中操作Excel实例代码
2010/04/29 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
实例Python处理XML文件的方法
2015/08/31 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
公务员更新知识培训实施方案
2014/03/31 职场文书
《雪儿》教学反思
2014/04/17 职场文书
课外科技活动总结
2014/08/27 职场文书
公务员考察材料
2014/12/23 职场文书
毕业论文致谢信
2015/05/14 职场文书
《鸡兔同笼》教学反思
2016/02/19 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
Python标准库pathlib操作目录和文件
2021/11/20 Python
pandas中pd.groupby()的用法详解
2022/06/16 Python