说到查询,我们一般就想起了关系型数据库的查询了,比如:order by(排序)、limit(分页)、范围查询(大于某个值,小于某个值..,in查询,on查询,like查询等待很多),同样mongodb同样也支持这些操作,只是语法不同,比如排序:mongodb里面使用了skip(field:1/-1)方法,下面就来一一介绍一下:
一、mongodb查询文档
1.查询文档之find() : 不加条件是查询集合全部的数据
语法:db.collectionName.find({条件},{field:true/false})
1.1查询所有数据
显示指定字段(与上图对比,find()第二个参数为指定查询的字段,格式[字段名:true/false]true为显示,false为不显示):
1.2 查询数据总数 count()
语法:db.collectionName.find({条件}).count()
2. 查询一个文档 findOne() :默认是查询符合条件的第一条文档
语法:db.collectionName.findOne({条件},{field:true/false})
3.pretty()方法:格式化显示查询的文档
二、条件操作符("$and"、"$nor"、"$not"、"$or"、"$exists"、"$mod"、"$regex"、"$where"、"$slice"、"$elemMatch","null查询"、"$all"、"$size"、"$in"、"$nin")
1.下面是一部分条件操作符的列表,含义、语法、以及和关系型数据库的对比
等于 |
{<key>:<value> } |
db.col.find({"by":"zgw"}) |
where by = 'zgw' |
小于($lt) | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}) |
where likes < 50 |
小于或等于($lte) | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}) |
where likes <= 50 |
大于($gt) | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}) |
where likes > 50 |
大于或等于($gte) | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}) |
where likes >= 50 |
不等于($ne) | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}) |
where likes != 50 |
语法:db.collectionName.find({field:{Operators1:value1,Operators2:value2}}) --[Operators:就是上面那些操作符()]
php格式:array(field=>array('$lte'=>value)) 或者 array(field=>array('$gte'=>value1,'$lte'=>value2))
下面是不等于操作符的查询:
2.操作符:"$and"、"$nor"、"$not"、"$or"、"$exists"、"$mod"、"$regex"、"$where"、"$slice"、"$elemMatch","null查询"、"$all"、"$size"、"$in"、"$nin"
2.1 null查询以及空查询(' ') :
下面是数据库中的三条数据,接下来就用这三条数据来演示如何查询null值和空(' ')
2.1.1 查询空值(' ')---不存在该字段文档不会被查询出来
2.1.2 查询null值---查询字段值是null的文档,文档中不存在该字段也会被查询出来
查询字段存在,并且值为null,(穿插介绍)需要使用[$in和$exists]来帮忙,其中$in表示匹配键值为数组内的任意值的文档,$exists则表示判断该字段是存在于集合中(true存在,false不存在)
2.2 $in 匹配键值为数组内的任意值的文档 (相当于关系型数据库中的 where id in(1,2,3,4,5.....))
2.3 $nin 匹配键值不存在数组内的任意值的文档 (相当于关系型数据库中的 where id not in(1,2,3,4,5.....))
2.4 $exists 判断该字段是存在于集合中(true为存在,false为不存在)
2.5 $and --- 连接多个条件,也可以直接使用逗号分隔
2.6 $nor 指定至少一个或多个表达式,找出不满足它的文档(就是找出条件相反的文档)
2.7 $or 指定至少一个或多个表达式,只要满足其中一个表达式的文档都查询出来
2.8 $mod 取模(就是我们说的取余数比如:30除4等7,余2,这个2就是取模的结果)
当遇到字段的值为null,则使用$where 代替$mod,javascript中会把null转换成0
2.9 $where 操作符功能强大而且灵活,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。
比较文档中的两个键的值是否相等.例如查找出banana等于peach键值的文档
注意:我们尽量避免使用"Where"査询,因为它们在速度上要比常规査询慢很多。每个文档都要从BSON转换成JavaScript对象,然后通过"Where"査询,因为它们在速度上要比常规査询慢很多。每个文档都要从BSON转换成JavaScript对象,然后通过"where"的表达式来运行;同样还不能利用索引
3.0 $regex 操作符查询中可以对字符串的执行正则匹配(只对字符串有效)。 MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式,类似关系型数据库的where name like '%string%'
3.1 $elemMatch
未完待续:http://www.cnblogs.com/egger/p/3135847.html
http://www.cnblogs.com/zhaoyang/archive/2012/01/10/2317664.html
mongodb查询文档的更多相关文章
-
MongoDB基础教程系列--第四篇 MongoDB 查询文档
查询文档 查询文档可以用 find() 方法查询全部文档,可以用 findOne() 查询第一个文档,当然还可以根据 条件操作符 和 $type操作符 查询满足条件的文档. find() 和 find ...
-
MongoDB 查询文档
语法 MongoDB 查询数据的语法格式如下: >db.COLLECTION_NAME.find() find() 方法以非结构化的方式来显示所有文档. 如果你需要以易读的方式来读取数据,可以使 ...
-
【Mongodb教程 第七课 】MongoDB 查询文档
find() 方法 要从MongoDB 查询集合数据,需要使用MongoDB 的 find() 方法. 语法 基本的find()方法语法如下 >db.COLLECTION_NAME.find() ...
-
MongoDB 教程(八):查询文档、条件操作符
MongoDB 查询文档 MongoDB 查询文档使用 find() 方法. find() 方法以非结构化的方式来显示所有文档. MongoDB 查询数据的语法格式如下: db.collection. ...
-
MongoDB(四):数据类型、插入文档、查询文档
1. 数据类型 MongoDB支持许多数据类型. 字符串 - 这是用于存储数据的最常用的数据类型.MongoDB中的字符串必须为UTF-8. 整型 - 此类型用于存储数值. 整数可以是32位或64位, ...
-
MongoDB数据库文档操作
前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 数据类型 在介绍文档操作之前,首先要了解MongoDB的数据类型 MongoDB支持许多数据类型,包括 1.字符串 - 这是用于存储数据 ...
-
MongoDB的文档、集合、数据库(二)
为了理解MongoDB的名词,可以将其于关系型数据库进行对比: 一.文档 概述 文档是MongoDB的核心概念,是数据的基本单元,非常类似于关系数据库中的行.在MongoDB中,文档表示为键值对的一个 ...
-
Mongodb嵌套文档的改动-利用数组改动器更新数据
初学mongodb的可能和我一样有个疑问.mongodb是文档型的,那么假设一个文档嵌套另外一个文档,假设对这个嵌套文档进行增删改查呢. 就像例如以下这样:.怎样对auther里面的name进行增删改 ...
-
ElasticSearch入门 第五篇:使用C#查询文档
这是ElasticSearch 2.4 版本系列的第五篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
随机推荐
-
Java 之 软件的生命周期
1.寻找商机: a.项目:有明确的需求提供方 b.产品:没有需求提供方,由市场决定 2.可行性分析: a.国家法律法规 b.资金 c.人员技术组成 3.投标 4.需求的搜集与分析: a.参与人员:需求 ...
-
windbg----as、$u0(固定别名、自定义别名)
固定别名($u0~$u9) 有10个固定别名.他们是$u0, $u1, ..., $u9.他们的等价字符串可以是不包含ENTER键的任意字符串.使用r (Registers)命令为固定别明指定等价字符 ...
-
URAL 2065 Different Sums (找规律)
题意:构造一个数列,使得它们的区间和的种类最少,其中数列中不同的数的数目不少于k. 析:我们考虑0这个特殊的数字,然后0越多,那么总和种类最少,再就是正负交替,那么增加0的数量. 代码如下: #pra ...
-
QT 自动获取可用串口
本来想直接用Settings来获取的,但是串口信息类似 "\Device\Serial0",死活获取不了,用了转义.反斜杠还是获取不到,所以就放弃了,网上好像也没有获取成功的. 所 ...
-
[php] php操作xml
xml文件 <?xml version="1.0" encoding="ISO-8859-1"?> <root> <item id ...
-
ajax技术基础详解
一.概述 1.什么是ajax 可以与服务器进行[异步]交互的技术,浏览器无需刷新 2.什么时候出现ajax? -- XMLHttp 微软 1999年微软公司发布IE5版本,内嵌了ajax技术 什么时候 ...
-
content-type 组件
content-type初识 什么是content-type ContentType是Django的内置的一个应用,可以追踪项目中所有的APP和model的对应关系,并记录在ContentType表中 ...
-
ESP8266开发笔记
自1999年MIT的Kevin Ash-ton教授首次提出物联网(IoT)的概念至今已经有20年了.放眼现在国内外的物联网市场,真可谓是百家争鸣,方兴未艾,无数家软硬件公司在这里舞浪弄潮,逐鹿其中,上 ...
-
.net core下载文件
上传的文件是在wwwroot下 通过保存的路径跟文件名称完成下载 public IActionResult DownloadFile() { var filePath = "/Upload ...
-
license
http://139.199.89.239:1008/4571ab86-eb0d-4d2b-999e-37406bb8ba38 _~~~ rO0ABXNyAChjb20uemVyb3R1cm5hcm9 ...