PHP操作Mongodb之高级查询篇
本文主要讲解PHP中Mongodb的除了增删改查的一些其他操作。
在PHP操作Mongodb之增删改查篇中我们介绍了PHP中Mongodb的增加、删除、修改及查询数据的操作。本文主要是将查询时用到的高级知识跟大家分享下。
1、查询时的排序
在关系型数据库的查询中,往往会用到排序。例如时间倒序,点击率升序啦等等。在Mongodb的查询中,也有排序功能的。
语法格式:
$db->find()->sort(array('age' => 1)); //按age字段升序排序。1为升序,-1为降序。
例如:
<?php
//连接数据库
$connnect = new Mongo("mongodb://127.0.0.1:27017");
//选择数据库
$db = $connnect->selectDB('mydb')->selectCollection("user");
//查询所有数据,按age字段升序排序
$cursor = $db->find()->sort(array('age' => 1)); $array = array();
while($cursor->hasNext()) {
$array[] = $cursor->getNext();
}
echo "<pre>";
print_r($array);
?>
运行结果为:

2、查询时的skip和limit操作
同样,在关系型数据库中,有limit可以限制查询区间。在Mongodb中也有类似的功能,那就是skip和limit操作。skip是跳过前多少条数据;limit是查询多少条数据。例如接着上面的列子,我们从第二条数据开始,查询一条数据。代码如下:
<?php
//连接数据库
$connnect = new Mongo("mongodb://127.0.0.1:27017");
//选择数据库
$db = $connnect->selectDB('mydb')->selectCollection("user");
//按age字段升序查询,从第二条开始,查询一条数据
$cursor = $db->find()->sort(array('age' => 1))->skip(1)->limit(1); $array = array();
while($cursor->hasNext()) {
$array[] = $cursor->getNext();
}
echo "<pre>";
print_r($array);
?>
运行结果如下:

3、查询时的字段筛选
在查询时,我们往往会遇到,只需要查询某一个或者多个特定的字段,这就涉及到字段筛选。语法格式如下:
$db->find(array(), array('age' => true)); //第一个参数是查询条件,第二个参数是字段筛选。值为true,表示查询该字段;值为false,表示不查询该字段。
例如上面的列子,我们只想查询年龄这个字段,代码如下:
<?php
//连接数据库
$connnect = new Mongo("mongodb://127.0.0.1:27017");
//选择数据库
$db = $connnect->selectDB('mydb')->selectCollection("user"); //查询age和id两个字段。
$cursor = $db->find(array(), array('age' => true, 'id' => true)); $array = array();
while($cursor->hasNext()) {
$array[] = $cursor->getNext();
}
echo "<pre>";
?>
运行结果如下:

4、查询时的Like操作
在查询时,我们也会遇到需要模糊查询的时候。在关系型数据库中使用like查询即可,在mongodb数据库中,也有模糊查询的操作。语法格式如下:
$db->find(array('name' => new MongoRegex("/^j/")));
//mongodb中的模糊查询是通过正则查询的
例如上面的例子,我们查询名字以j开头的数据,代码如下:
<?php
//连接数据库
$connnect = new Mongo("mongodb://127.0.0.1:27017");
//选择数据库
$db = $connnect->selectDB('mydb')->selectCollection("user");
//查询name字段以j开头的数据
$cursor = $db->find(array('name' => new MongoRegex("/^j/"))); $array = array();
while($cursor->hasNext()) {
$array[] = $cursor->getNext();
}
echo "<pre>";
print_r($array);
?>
运行结果如下:

5、查询时的count操作
在查询时,我们也许会碰到需要查询满足条件的数据的总和。这时就用到了count操作。语法格式如下:
$db->count();
例如上面的例子,我们查询数据数据库中的数据总和。代码如下:
<?php
//连接数据库
$connnect = new Mongo("mongodb://127.0.0.1:27017");
//选择数据库
$db = $connnect->selectDB('mydb')->selectCollection("user"); echo $db->count();
?>
运行结果是:3
6、查询时的or操作
在查询时,我们也许也会用到or操作。语法格式如下:
$db->find(array('$or' => array(array('id' => 1), array('name' => 'java'))));
例如上面的例子,我们查询id是1,或者name是java的数据。代码如下:
<?php
//连接数据库
$connnect = new Mongo("mongodb://127.0.0.1:27017");
//选择数据库
$db = $connnect->selectDB('mydb')->selectCollection("user"); $cursor = $db->find(array('$or' => array(array('id' => 1), array('name' => 'java')))); $array = array();
while($cursor->hasNext()) {
$array[] = $cursor->getNext();
}
echo "<pre>";
?>
运行结果是:

PHP操作Mongodb之高级查询篇的更多相关文章
- python操作mongodb根据_id查询数据的实现方法
python操作mongodb根据_id查询数据的实现方法 python操作mongodb根据_id查询数据的实现方法,实例分析了Python根据pymongo不同版本操作ObjectId的技巧, ...
- python数据库-mongoDB的高级查询操作(55)
一.MongoDB索引 为什么使用索引? 假设有一本书,你想看第六章第六节讲的是什么,你会怎么做,一般人肯定去看目录,找到这一节对应的页数,然后翻到这一页.这就是目录索引,帮助读者快速找到想要的章节. ...
- Python操作MongoDB看这一篇就够了
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...
- mongodb的高级查询
db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false]) 添加用户 db.auth(usrename,passwor ...
- MongoDB的使用学习之(六)MongoDB的高级查询之条件操作符
此文分为两点,主要是在第二点--java 语法,但是按顺序必须先把原生态的语法写出来 (还有一篇文章也是不错的:MongoDB高级查询用法大全(包含MongoDB命令语法和Java语法,其实就是我整理 ...
- python 操作mongodb数据库模糊查询
# -*- coding: utf-8 -*-import pymongoimport refrom pymongo import MongoClient #创建连接#10.20.66.106clie ...
- MongoDB学习--高级查询 [聚合Group]
Group大约需要一下几个参数. key:用来分组文档的字段.和keyf两者必须有一个 keyf:可以接受一个javascript函数.用来动态的确定分组文档的字段.和key两者必须有一个 initi ...
- MongoDB高级查询详细
前言 前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客 MongoDB下载安装与简单增删改查 前 ...
- mongodb高级查询
前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客 MongoDB下载安装与简单增删改查 前奏:启 ...
随机推荐
- 用ionic快速开发hybird App(已附源码,在下面+总结见解)
1.ionic简介 ionic 是用于敏捷开发APP的解决方案.核心思路是:利用成熟的前端开发技术,来写UI和业务逻辑.也就是说,就是一个H5网站,这个区别于react-native,native.即 ...
- String类常用方法
1.String类的特点,字符串一旦被初始化就不会被改变. 2.String对象定义的两种方式 ①String s = "affdf";这种定义方式是在字符串常量池中创建一个Str ...
- DIV+CSS:Margin和Padding属性[转载]
margin和padding用来隔开元素,margin是隔开元素与外边,padding是隔开元素里边. margin: 包括margin-top.margin-right.margin-bottom. ...
- 填坑*** WARNING L15: MULTIPLE CALL TO SEGMENT
填坑*** WARNING L15: MULTIPLE CALL TO SEGMENT 警告:发生了重入! 解释:在主循环里调用了一个函数,而在中断服务中又一次调用了同样的函数.当主循环运行到该函数中 ...
- Java开发的命名规范
Java的命名规范 定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性,便于日后维护. 1.工程的命名(全用小写字母) 工程的命名一般全用小写字母,单词之间用下划线“_”隔开. 2.包的命 ...
- 42、lucene和机器学习进行全文搜索,并排序
package com.lucene.test; import java.io.BufferedInputStream; import java.io.File; import java.io.Fil ...
- HTTP权威协议笔记-6.代理
6.1 Web的中间实体 Http的代理服务器即是客户端的服务器又是服务器的客户端. 它介于服务器与客户端之间,当客户端发送请求报文经过它时,它会像服务器一样正确的处理请求和返回响应,同时,代理服务器 ...
- MySQL事件 Events
MySQL事件 Events 一.关键字: EVENT 二.语法: CREATE EVENT? [IF NOT EXISTS ] //如果不存在则创建 event_name? ON SCHED ...
- information_schema系列五(表,触发器,视图,存储过程和函数)
这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益. 1:TABLES TABLES这张表毫无疑问了,就是记录的数据库中表 ...
- flexbox 的相关属性的运用
若是用 JS 动态的添加 html 元素到有 flexbox 属性的元素上,那么渲染的时候 可能会有问题. CSS 代码如下: .display-flex { /* OLD: Safari, iOS, ...