MongoDB文档查询操作(一)
上篇文章我们主要介绍了MongoDB的修改操作,本文我们来看看查询操作。
本文是MongoDB系列的第五篇文章,了解前面的文章有助于更好的理解本文:
find方法再探
find方法是很重要的一个查询方法,我们在前面也已经使用过多次了,一般情况下我们调用的是:
find()
没有传入任何参数,这个等价于:
find({})
都表示没有查询条件,查询所有的数据。如果有查询条件,我们传入查询条件即可,查询条件也是一个文档,如下表示查询x为1的文档:
db.sang_collect.find({x:1})
如果查询条件文档中有多个字段,多个字段之间的关系是AND,如下表示查询x为1并且y为99的文档:
db.sang_collect.find({x:1,y:99})
默认情况下,每次查询都会返回文档中所有的key/value对,我们也可以自定义返回的字段,如下表示只返回x字段,其他字段都不返回:
db.sang_collect.find({},{x:1})
参数1表示返回某一个字段,0表示不返回某一个字段,当我们设置只返回x的时候,_id
默认还是返回的,如果不想返回_id
,我们可以设置_id
为0,如下:
db.sang_collect.find({},{x:1,_id:0})
此时返回的数据中就不包括_id
字段了。
各种查询条件
比较运算符
这里的比较运算符都比较好理解,如下表:
<
比如我想查询所有成绩在[90,100]之间的学生:
原始数据如下:
/* 2 */
{
"_id" : ObjectId("59f0b17249fc5c9c2412a666"),
"name" : "zs",
"score" : 100.0
}
/* 3 */
{
"_id" : ObjectId("59f0b17249fc5c9c2412a667"),
"name" : "ls",
"score" : 90.0
}
/* 4 */
{
"_id" : ObjectId("59f0b17249fc5c9c2412a668"),
"name" : "ww",
"score" : 70.0
}
/* 5 */
{
"_id" : ObjectId("59f0b17249fc5c9c2412a669"),
"name" : "zl",
"score" : 80.0
}
查询操作如下:
db.sang_collect.find({score:{$lte:100,$gte:90}})
查询结果如下:
/* 1 */
{
"_id" : ObjectId("59f0b17249fc5c9c2412a666"),
"name" : "zs",
"score" : 100.0
}
/* 2 */
{
"_id" : ObjectId("59f0b17249fc5c9c2412a667"),
"name" : "ls",
"score" : 90.0
}
如果要查询分数不为90的学生,操作如下:
db.sang_collect.find({score:{$ne:90}})
nin
$in有点类似于SQL中的in关键字,表示查询某一个字段在某一个范围中的所有文档,比如我想查询x为1或者2的所有文档,如下:
db.sang_collect.find({x:{$in:[1,2]}})
in恰好相反,表示查询某一个字段不在某一个范围内的所有文档,比如我想查询x不为1或者2(不为1且不为2)的所有文档,如下:
db.sang_collect.find({x:{$nin:[1,2]}})
$or
$or有点类似于SQL中的or关键字,表示多个查询条件之间是或的关系,比如我想查询x为1或者y为99的文档,如下:
db.sang_collect.find({$or:[{x:1},{y:99}]})
$type
$type可以用来根据数据类型查找数据,比如我想要查找x类型为数字的文档,如下:
db.sang_collect.find({x:{$type:1}})
1表示数字,其他数据类型对应的数字参见下表。
类型 |
对应数字 |
别名 |
说明 |
---|---|---|---|
Double1 |
1 |
double |
|
String |
2 |
string |
|
Object |
3 |
object |
|
Array |
4 |
array |
|
Binary data |
5 |
binData |
|
Undefined |
6 |
undefined |
弃用 |
ObjectId |
7 |
objectId |
|
Boolean |
8 |
bool |
|
Date |
9 |
date |
|
Null |
10 |
null |
|
Regular Expression |
11 |
regex |
|
DBPointer |
12 |
dbPointer |
|
JavaScript |
13 |
javascript |
|
Symbol |
14 |
symbol |
|
JavaScript(with scope) |
15 |
javascriptWithScope |
|
32-bit integer |
16 |
int |
|
Timestamp |
17 |
timestamp |
|
64-bit integer |
18 |
long |
|
Min key |
-1 |
minKey |
|
Max key |
127 |
maxKey |
$not
$not用来执行取反操作,比如我想要查询所有x的类型不为数字的文档,如下:
db.sang_collect.find({x:{$not:{$type:1}}})
$and
$and类似于SQL中的and,比如我想查询y大于98并且小于100的数据,如下:
db.sang_collect.find({$and:[{y:{$gt:98}},{y:{$lt:100}}]})
上面的操作我们也可以使用下面简化的写法:
db.sang_collect.find({y:{$lt:100,$gt:98}})
好了,MongoDB中的查询操作还是非常丰富的,本文我们先说到这里,下篇文章我们继续介绍,小伙伴们有问题欢迎留言讨论。
参考资料:
1.《MongoDB权威指南第2版》
- tensorflow版的bvlc模型
- 几种服务器端IO模型的简单介绍及实现(下)
- caffe中关于数据进行预处理的方式
- 高性能IO模型浅析
- 关于梯度下降算法的的一些总结
- Hadoop集群搭建总结及Hadoop2.5集群伪分布、完全分布搭建总结
- 【提高篇】Go语言并发技术详解
- 【提高篇】GO语言标准错误处理机制error用法实例
- 【Golang语言社区】H5游戏开发-从零开始开发一款H5小游戏(四) 撞击吧粒子,炫酷技能的实现
- 机器学习实践:用 Spark 和 DBSCAN 对地理定位数据进行聚类
- 【Golang语言社区】H5游戏开发从零开始开发一款H5小游戏(三) 攻守阵营,赋予粒子新的生命
- 【H5游戏实例】JS+canvas实现人机大战之五子棋
- Go包管理的探索与实践
- 机器学习优化算法之爬山算法小结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Mybatis高级查询(一):resultMap与resultType
- JDK错误用法—TimSort
- Mybatis高级查询(三):分页查询
- 以OpenResty搭建RTB竞价引擎接入层
- 优化Linux bootloader速度的究极之路:从GRUB到EFI Stub
- Linux--nc命令
- Netty之美--I/O模型
- 023.基于IT论坛案例学习Elasticsearch(二):Query高级知识(一)
- 打卡群刷题总结0807——验证二叉搜索树
- 打卡群刷题总结0808——二叉树的层序遍历
- Mybatis高级查询(四):延迟加载
- I/O多路复用器之隐秘的角落
- 打卡群刷题总结0809——二叉树的锯齿形层次遍历
- 简单的ssm整合练手项目:汽车项目
- 在spring-boot中使用pageHelper插件