最近的一个项目中用到了MongoDB,主要是使用MongoDB的PHP扩展。MongoDB的扩展中用于一个用于查询的方法是find()。下面针对在理解MongoDB扩展的find()方法中做的实验做个简单的笔记,同时希望能够帮助别人。

  MongoDB的PHP扩展中,可以使用MongoColletion的find($query,$fileds)进行查询,其中find()根据$query的条件进行匹配查询,$query中说明需要返回的字段。使find()的时候,需要注意的事项是,所有待查询的变量都必须使用单引号括起来,这样才不至于用变量的值代替命令。另外一个需要注意的情况是,$fields表示的要返回的项,在$field中所有的要显示的字段都对应与1,而不显示的项对应的值为0,而且0只用于'_id'字段,用于别的字段会导致错误。$query和$都是以数组的形式传递给find(),mongoDB的PHP扩展的参数都是使用数组的形式进行传递。

  标准做法下,$fields数组中不会使用引号(这里以及下文如果不进行特别的说明,括号包括大括号和小括号)将0引起来,这样会导致0无法起作用,但是将1引起来却不会有什么影响,提倡大家使用标准做法。为了说明给$fields字段加引号之后会有什么不同,下面进行几个实验以说明其影响。

  一、标准做法

  $field数组中'_id'字段的值为0不加引号,其余要显示的所有字段均为1。

  

(a)

(b)

图 1 标准做法

  当连上MongoDB选择数据库和集合之后使用find()查找,返回的结果是其实是cursors,如果想要显示出来返回的结果,需要使用iterator_to_array()将返回的结果转化为数组的形式。由图 1(b)的结果可以看出,返回的结果中不带有'_id'字段,且返回的结果中数组的key为[0]。这里需要说明一下,MongoDB为每个插入的文档添加一个'_id'字段,且在查找的过程中,如果不指定'_id'字段为0,则其默认出现在返回的结果中。如图 2(a) (b)所示,在没有指定$query数组中的'_id'字段的时候,默认是输出'_id'字段的,且此时输出的结果中,key不再是以[0]开始的数字下标,而是原来文章中的'_id'字段的值。

(a)

  

(b)

图 2 不指定'_id'字段为0的情况

  二、将0用引号引起来

  如果将0用引号引起来,在$fields字段加入'_id'=>'0'或者'_id'=>"0",则'_id'字段将依然显示出来,且此时返回的结果数组中对应的数组的key也不是从[0]开始的,而是原来的文档中的'_id'字段对应的value值作为数组的'key'值。如下图所示。

(a)

(b)

(c)

图 3 为$fields数组中的'_id'字段加上引号

  三、在$fileds数组中除'_id'字段以外使用0

  前面已经说过,0只能用在'_id'字段用于控制是否显示'_id'字段的值,但是绝不能用于其他的字段,如果用于其他的字段则导致程序报错。如下图所示,将'tags'字段设置为0,导致程序报错。

(a)

(b)

图 4 $field数组中别的字段使用0的出错情况

  这也就是表明了用于存储返回值的$fields数组中,将想要显示的字段的值设置为1,不设置的字段不显示,但是决不允许在除'_id'字段之外的其余字段使用0。

  小结:

  初学Mongo,以后遇到问题在和大家一起学习。抱歉的是图不太清楚,当时是将图截下来保存在word中,再使用的时候就已经不太清楚了。

mongoDB学习记录---PHP扩展的find返回值的更多相关文章

  1. MongoDB学习记录

    一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...

  2. (转)SpringMVC学习(七)——Controller类的方法返回值

    http://blog.csdn.net/yerenyuan_pku/article/details/72511844 本文所有案例代码的编写均建立在前文SpringMVC学习(六)——SpringM ...

  3. MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"

    如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...

  4. MongoDB 学习记录(二)yum安装

    前言:接着上篇继续学习MongoDB,这次学习的是在Linux下安装MongoDB 环境:centos7.3 安装版本:MongoDB4.0 官网安装教程地址 https://docs.mongodb ...

  5. MongoDB学习记录(四) - MongoDB的"增查改删"操作之"改"

    更新文档主要有以下几种方法: db.collection.updateOne(filter, update, options) db.collection.updateMany(filter, upd ...

  6. MongoDB 学习记录(一)

    前言:之前一直只是简单了解MongoDB,而且是随便看看的那种,今天决定好好的整理一下,以便自己能  温故而知新 1.MongoDB是什么 MongoDB 是一个高性能,开源,无模式的文档型数据库,开 ...

  7. MongoDB学习记录(一) - 安装、启动与建立数据库

    简要说明一个基本概念:MongoDB中的三要素:数据库(database).集合(collection)和文档(document). 文档:类似于JSON对象,由字段(field)和值(value)组 ...

  8. MongoDB学习记录(三) - MongoDB的"增查改删"操作之"查"

    查找使用的方法: db.collection.find() 查找所有文档 db.collection.find({})或者db.collection.find({}) 指定键值对 db.collect ...

  9. mongodb学习(二)分级查询数组中的值

    (PS: 标题有点不妥当...) 大概是这样...数据结构如下: 需要模糊查询title的值... mongodb中操作语句: 主要是注意这里urlElements不需要加[0]...我开始的时候写成 ...

随机推荐

  1. Network Alignment(网络比对)模型

      两类模型: 第一类:two-steps method 先计算两个网络之间每两个结点的相似性,再从N1*N2对相似性中抽取N1对匹配(N1<=N2). 代表算法:IsoRank 第二类:obj ...

  2. python对象

    一: 基本概念 在pyhton中一切皆对象,就像类unix中的一切皆文件一样,恩,一切.把事物当作对象进行处理, 这样自然就成了面向对象的编程了. 所有的 Python 对像都拥有三个特性:身份,类型 ...

  3. 查看哪些表的哪些列含有指定字符串(如‘andy’存在哪些表的哪些列中)

    -- 查看表中列含有指定字符.SQL> select * from demo1;NAME                                   ID---------------- ...

  4. RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡

    目录 [TOC] 1.基本概念 1.1.RabbitMQ集群概述   通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服 ...

  5. MySQL 使用笔记(一) 关联

    2016-12-16 一.当前未掌握总结: 目前MySQL中不会的内容: 1.临时表(变量表) 2.存储过程 3.游标 4.函数 二.关联 内联.左关联.右关联.外联 (一).标准sql语句中的关联及 ...

  6. 根据Request获取客户端IP 内网IP及外网IP

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...

  7. 关于lemon oa的数据库

    lemonOA的数据库默认用的是hsqldb,这个数据库还是第一次听说,暂且不论. 也就说Lemon OA默认使用HSQLDB数据库,是嵌入式的数据库不需要单独安装. lemon-1.4.0\weba ...

  8. NVMe over Fabrics又让RDMA技术火了一把

    RDMA是个什么鬼?相信大部分不关心高性能网络的童鞋都不太了解.但是NVMe over Fabrics的出现让搞存储的不得不抽出时间来看看这个东西,这篇文章就来介绍下我所了解的RDMA. RDMA(R ...

  9. nginx响应时间监控脚本

    最近我们服务的使用方总是反应说我们接口超时,于是做了一个监控脚本,统计最近五分钟的响应情况,并对异常情况发送邮件报警. #!/bin/bash function define(){ ori_log_p ...

  10. Libevent Not Found Error While Install Tmux

    First install libevent using –prefix=$HOME erro:“libevent not found” solve with using this when inst ...