本文主要讲解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之高级查询篇的更多相关文章

  1. python操作mongodb根据_id查询数据的实现方法

    python操作mongodb根据_id查询数据的实现方法   python操作mongodb根据_id查询数据的实现方法,实例分析了Python根据pymongo不同版本操作ObjectId的技巧, ...

  2. python数据库-mongoDB的高级查询操作(55)

    一.MongoDB索引 为什么使用索引? 假设有一本书,你想看第六章第六节讲的是什么,你会怎么做,一般人肯定去看目录,找到这一节对应的页数,然后翻到这一页.这就是目录索引,帮助读者快速找到想要的章节. ...

  3. Python操作MongoDB看这一篇就够了

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...

  4. mongodb的高级查询

    db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false])  添加用户 db.auth(usrename,passwor ...

  5. MongoDB的使用学习之(六)MongoDB的高级查询之条件操作符

    此文分为两点,主要是在第二点--java 语法,但是按顺序必须先把原生态的语法写出来 (还有一篇文章也是不错的:MongoDB高级查询用法大全(包含MongoDB命令语法和Java语法,其实就是我整理 ...

  6. python 操作mongodb数据库模糊查询

    # -*- coding: utf-8 -*-import pymongoimport refrom pymongo import MongoClient #创建连接#10.20.66.106clie ...

  7. MongoDB学习--高级查询 [聚合Group]

    Group大约需要一下几个参数. key:用来分组文档的字段.和keyf两者必须有一个 keyf:可以接受一个javascript函数.用来动态的确定分组文档的字段.和key两者必须有一个 initi ...

  8. MongoDB高级查询详细

    前言 前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前 ...

  9. mongodb高级查询

    前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前奏:启 ...

随机推荐

  1. 读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一

    背景: 有心学习jquery源码,苦于自己水平有限,若自己研究,耗时耗力,且读懂之日无期. 所以,网上寻找高手的源码分析.再经过自己思考,整理,验证.以求有所收获. 此篇为读高手艾伦<jQuer ...

  2. PVANET----Deep but Lightweight Neural Networks for Real-time Object Detection论文记录

    arxiv上放出的物体检测的文章,在Pascal voc数据集上排第二.源码也已放出(https://github.com/sanghoon/pva-faster-rcnn),又可以慢慢把玩了.这篇文 ...

  3. synchronized锁重入

    package synLockIn_1; /* synchronized锁重入,当一个线程得到一个对象锁且还未释放锁时,再次请求此对象锁时可以再次得到该对象的锁 * 此例中线程1进入Service类的 ...

  4. private + virtual in Java/C++

    在Java中,private方法是隐式final的,就是说即使在子类中定义一个一模一样的方法,编译器认为这是两个没有联系的方法.private方法不参与运行时多态,这点和 final方法.static ...

  5. AJAX04 JQ的AJAX

    一.jQuery中的Ajax 1.jQuery为我们提供了更强大的Ajax封装 $.ajax({}) 可配置方式发起Ajax请求 $.get() 以GET方式发起Ajax请求 $.post() 以PO ...

  6. 如何决定DCOM是否可用

    如何决定DCOM是否可用  

  7. java中 sleep 与 wait 的区别

    1.所属类不同 sleep是Thread类的方法: wait是Object类的方法: 2.功能不同 sleep是线程用来控制自身流程的,在调用sleep()方法的过程中,线程不会释放对象锁: wait ...

  8. 提升linux下tcp服务器并发连接数限制

    1.修改用户进程可打开文件数限制   在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统 ...

  9. Spark+Hadoop问题小结

    1.spark执行./start-all.sh报"WARN Utils: Service 'sparkWorker' could not bind on port 0. Attempting ...

  10. javascript-binarySearch

    前提: 数组已排序,且为正整数数组. function brnarySearch(arg, arr) { var right = arr.length - 1; var left = 0; while ...