mongoDB学习记录---PHP扩展的find返回值

  最近的一个项目中用到了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中,再使用的时候就已经不太清楚了。

时间: 2024-08-10 08:41:45

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

MongoDB学习记录

一.操作符 "$lt" :"<""$lte" :"<=""$gt" :">""$gte" :">=""$ne" :"!=""$in" :查询匹配指定条件值的文档:"$nin" :查询不匹配指定条件值的文档:"$or" :或查询

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

本文所有案例代码的编写均建立在前文SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解的案例基础之上,因此希望读者能仔细阅读这篇文章. 返回ModelAndView Controller类方法中定义ModelAndView对象并返回,对象中可添加model数据.指定view.之前我就已讲过,在此并不过多赘述. 返回void 在Controller类方法形参上可以定义request和response,使用request或response指定响应结果:

lua学习笔记14:函数多返回值

Lua中函数可以返回多个值,为了说明不同情况下,返回值的个数,我们先声明如下几个函数: -- 无返回值 function fun0() end -- 一个返回值 function fun1() return 1 end -- 二个返回值 function fun2() return 1, 2 end -- 三个及多个返回值 function fun3() return 1, 2, 3 end 通常情况下,Lua会根据函数调用的不同情况自动调整返回值的有效个数.主要有以下几种情况: 1. 调用作为

MongoDB学习记录一

本博客说明:最开始部分是一个运维部署案例模板,给开发安装MongoDB都可以按照这个模板来进行基本部署,中间部分是自己研究其他博客记录部署和授权相关内容,最后部分是网上视频学习相关内容:www.mongodb.org 下载地址案例安装一个完整MongoDB所做操作:1.上传解压tar -zxvf mongodb-linux-x86_64-3.0.6.tgz -C /home/cd /home && mv mongodb-linux-x86_64-3.0.6 mongodb2.创建所需目录c

MongoDB学习记录(一)

1.MongoDB简介 2.MongoDB特点 3.MongoDB功能 4.MongoDB部署 4.1 MongoDB单机部署 4.2 MongoDB主从部署 4.3 MongoDB分片部署 附录一:MongoDB工具介绍 附录二:MongoDB报错 附录三:MongoDB命令详解

Python开发实用技巧:获取部分返回值的4种方式

python的函数支持返回多个值.返回多个值时,默认以tuple的方式返回. 例如,下面两个函数的定义是完全等价的. 1 def f(): 2 return 1,2 3 4 def f(): 5 return (1,2) 如果将函数调用的返回值赋值给对应个数的变量,它会一一对应的赋值,这很容易理解.下面是等价的: 1 a, b = f() # a=1, b=2 2 (a, b) = f() 如果赋值给一个变量,将会把整个元组赋值给变量.下面是等价的,a表示整个元组(1,2): 1 a = f()

MongoDB入门解析【学习记录】

刚开始学习mongodb,对笔记做了一个整理.是基于nodejs来学习的. 1.mongodb介绍 mongodb 是C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. mongodb 旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,数组及文档数组. { username:&qu

高可用mongodb集群的学习记录(四mongodb分片集群搭建)

无论oracle还是mysql数据库都有分区的概念,即同一张表物理上不在同一台机器上,有效缓解了表都集中存在一台机器的压力.当然,mongodb也有类似的机制,即是分片.具体理论知识大家可以参考网上文档,我这里只记录下具体操作步骤 参考网络上一个图.我选用的是2个副本集+1个仲裁.实际上我这里分片集群需要3个mongos,3个config server,数据分片3个shard server,对应着还有3个副本,3个仲裁节点,总共需要15个实例.因为我资源确实紧张,又不想影响实验效果.冥思苦想了一

【 论文学习记录】A flexible and scalable slam system with full 3d motion estimation 一种灵活可扩展带有3D运动估计的slam系统

A flexible and scalable slam system with full 3d motion estimation   论文学习记录 这篇论文系统框架,栅格多阈值,更新同步与伪数据,扫描匹配起始点,协方差交叉融合的思想还是值得借鉴的. 摘要 关注于搜救机器人建图定位与导航的框架性文章. 低计算资源的在线快速获取栅格地图: 结合鲁棒的激光扫描匹配方法和惯性传感器姿态估计系统. 快速地图梯度近似与多分辨率(类似图像金字塔)栅格地图,精确而不需要闭环检测. 介绍 2D slam 子系