php中的mongodb select常用操作代码示例


Posted in PHP onSeptember 06, 2014

前面说到了mongodb安装,配置,集群,以及php的插入与更新等,请参考:mongodb。
下面说一下,mongodb select的常用操作

测试数据:

{ "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80, "code" : 10 }  

{ "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 }  

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }  

{ "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }

1、取表条数

> db.books.count();  

4  

  

> db.books.find().count();  

4  

  

> db.books.count({auther: "李白" });  

2  

  

> db.books.find({money:{$gt:40,$lte:60}}).count();  

1  

  

> db.books.count({money:{$gt:40,$lte:60}});  

1 

php代码如下,按顺序对应的:

$collection->count();             //结果:4  

$collection->find()->count();     //结果:4  

$collection->count(array("auther"=>"李白"));   //结果:2  

$collection->find(array("money"=>array('$gt'=>40,'$lte'=>60)))->count();     //结果:1  

$collection->count(array("money"=>array('$gt'=>40,'$lte'=>60)));    //结果:1 

提示:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于、$exists不存在、$in指定范围、$nin指定不在某范围

2、取单条数据

> db.books.findOne();  

{  

        "_id" : 1,  

        "title" : "红楼梦",  

        "auther" : "曹雪芹",  

        "typeColumn" : "test",  

        "money" : 80,  

        "code" : 10  

}  

  

> db.books.findOne({auther: "李白" });  

{  

        "_id" : 3,  

        "title" : "朝发白帝城",  

        "auther" : "李白",  

        "typeColumn" : "test",  

        "money" : 30,  

        "code" : 30  

} 

php代码如下,按顺序对应的

$collection->findOne();  

$collection->findOne(array("auther"=>"李白")); 

3、find snapshot 游标

> db.books.find( { $query: {auther: "李白" }, $snapshot: true } );  

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }  

{ "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }

php代码如下:

/** 

* 注意: 

* 在我们做了find()操作,获得 $result 游标之后,这个游标还是动态的. 

* 换句话说,在我find()之后,到我的游标循环完成这段时间,如果再有符合条件的记录被插入到collection,那么这些记录也会被$result 获得. 

*/  

$result = $collection->find(array("auther"=>"李白"))->snapshot();  

foreach ($result as $id => $value) {  

 var_dump($value);  

}

4、自定义列显示

> db.books.find({},{"money":0,"auther":0});      //money和auther不显示  

{ "_id" : 1, "title" : "红楼梦", "typeColumn" : "test", "code" : 10 }  

{ "_id" : 2, "title" : "围城", "typeColumn" : "test", "code" : 20 }  

{ "_id" : 3, "title" : "朝发白帝城", "typeColumn" : "test", "code" : 30 }  

{ "_id" : 4, "title" : "将近酒", "code" : 40 }  

  

> db.books.find({},{"title":1});          //只显示title列  

{ "_id" : 1, "title" : "红楼梦" }  

{ "_id" : 2, "title" : "围城" }  

{ "_id" : 3, "title" : "朝发白帝城" }  

{ "_id" : 4, "title" : "将近酒" }  

  

/** 

*money在60到100之间,typecolumn和money二列必须存在 

*/  

> db.books.find({money:{$gt:60,$lte:100}},{"typeColumn":1,"money":1});  

{ "_id" : 1, "typeColumn" : "test", "money" : 80 }  

{ "_id" : 4, "money" : 90 } 

php代码如下,按顺序对应的:

$result = $collection->find()->fields(array("auther"=>false,"money"=>false));    //不显示auther和money列  

  

$result = $collection->find()->fields(array("title"=>true));      //只显示title列  

  

/** 

 *money在60到100之间,typecolumn和money二列必须存在 

 */  

$where=array('typeColumn'=>array('$exists'=>true),'money'=>array('$exists'=>true,'$gte'=>60,'$lte'=>100));  

$result = $collection->find($where); 

5、分页

> db.books.find().skip(1).limit(1);  //跳过第条,取一条  

{ "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 } 

这根mysql,limit,offset有点类似,php代码如下:

$result = $collection->find()->limit(1)->skip(1);//跳过 1 条记录,取出 1条 

6、排序

> db.books.find().sort({money:1,code:-1});    //1表示降序 -1表示升序,参数的先后影响排序顺序   

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }  

{ "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 }  

{ "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80, "code" : 10 }  

{ "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }

php代码如下:

$result = $collection->find()->sort(array('code'=>1,'money'=>-1)); 

7、模糊查询

> db.books.find({"title":/城/});      //like '%str%' 糊查询集合中的数据  

{ "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 }  

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }  

  

> db.books.find({"auther":/^李/});    //like 'str%' 糊查询集合中的数据  

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }  

{ "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }  

  

> db.books.find({"auther":/书$/});   //like '%str' 糊查询集合中的数据  

{ "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 }  

  

> db.books.find( { "title": { $regex: '城', $options: 'i' } } );   //like '%str%' 糊查询集合中的数据  

{ "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 }  

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 } 

php代码如下,按顺序对应的:

$param = array("title" => new MongoRegex('/城/'));  

$result = $collection->find($param);  

  

$param = array("auther" => new MongoRegex('/^李/'));  

$result = $collection->find($param);  

  

$param = array("auther" => new MongoRegex('/书$/'));  

$result = $collection->find($param); 

8、$in和$nin

> db.books.find( { money: { $in: [ 20,30,90] } } );   //查找money等于20,30,90的数据  

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }  

{ "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }  

  

> db.books.find( { auther: { $in: [ /^李/,/^钱/ ] } } );    //查找以李,钱开头的数据  

{ "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 }  

{ "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }  

{ "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }

php代码如下,按顺序对应的:

$param = array("money" => array('$in'=>array(20,30,90)));  

$result = $collection->find($param);  

foreach ($result as $id=>$value) {  

 var_dump($value);  

}  

  

$param = array("auther" => array('$in'=>array(new MongoRegex('/^李/'),new MongoRegex('/^钱/'))));  

$result = $collection->find($param);  

foreach ($result as $id=>$value) {  

 var_dump($value);  

}

9、$or

> db.books.find( { $or: [ { money: 20 }, { money: 80 } ] } );   //查找money等于20,80的数据  

{ "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80, "code" : 10 } 

php代码如下:

$param = array('$or'=>array(array("money"=>20),array("money"=>80)));  

$result = $collection->find($param);  

foreach ($result as $id=>$value) {  

 var_dump($value);  

}

10、distinct

> db.books.distinct( 'auther' );  

[ "曹雪芹", "钱钟书", "李白" ]  

  

> db.books.distinct( 'auther' , { money: { $gt: 60 } });  

[ "曹雪芹", "李白" ] 

php代码如下:

$result = $curDB->command(array("distinct" => "books", "key" => "auther"));  

foreach ($result as $id=>$value) {  

 var_dump($value);  

}  

  

$where = array("money" => array('$gte' => 60));  

$result = $curDB->command(array("distinct" => "books", "key" => "auther", "query" => $where));  

foreach ($result as $id=>$value) {  

 var_dump($value);  

}

先写到这儿,上面只是SELECT的一些常用操作,接下来,还会写一点。

PHP 相关文章推荐
php5.3 废弃函数小结
May 16 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
php防注入及开发安全详细解析
Aug 09 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
smarty中常用方法实例总结
Aug 07 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
Django 中 cookie的使用
Aug 17 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 #PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 #PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 #PHP
php获取一个变量的名字的方法
Sep 05 #PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 #PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 #PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 #PHP
You might like
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
2018/12/24 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
Python : turtle色彩控制实例详解
2020/01/19 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
python绘制雷达图实例讲解
2021/01/03 Python
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
数据库方面面试题
2012/04/22 面试题
结构工程研究生求职信
2013/10/13 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
班主任2015新年寄语
2014/12/08 职场文书
运动会广播稿20字
2015/08/19 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android