第11章:MongoDB-CRUD操作--文档--查询
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
在find方法的第二个参数进行指定。默认情况下,始终会返回"_id",可以通过设置字段为0来表示不返回这个字段。
db.students.find().pretty() --返回所有
db.students.find({}).pretty() --返回所有
db.students.find({条件,不写查询所有},{"name":1}).pretty() --返回name字段和_id字段
db.students.find({条件,不写查询所有},{"name":1,"_id":0}).pretty() --只返回name字段
$not 不能用在顶级操作符,必须是正则或者文档
db.students.find({"age":{¬:{&eq:18}}}).pretty()
范围运算符:$in包含,$nin不包含
--查询姓名叫"张三","李四","王五"的人
db.students.find({"name":{"$in":["张三","李四","王五"]}}).pretty();
--查询姓名不叫"张三","李四","王五"的人
db.students.find({"name":{"$nin":["张三","李四","王五"]}}).pretty();
--查询年龄20岁,余数为0的人,即20
db.students.find({"age":{"$mod":[20,0]}}).pretty();
--查询年龄20岁,余数为1的人,即21
db.students.find({"age":{"$mod":[20,1]}}).pretty();
字段判断$exists:检查某个键是否存在,1表示存在,0表示不存在
db.students.find({"name":{"$exists":1}}).pretty();
null类型:不仅能匹配键的值为null,还匹配键不存在的情况
db.students.find({"name":null}).pretty();
正则表达式
如果要想实现模糊查询,那么必须使用正则表达式,而且正则表达式使用的是语言Perl兼容的正则表达式的形式。如果要想实现正则使用,则按照如下的定义格式:
·基础语法:{key : 正则标记};
·完整语法:{key : {"$regex" : 正则标记 , "$options" : 选项}}。
|- 对于options主要是设置正则的信息查询的标记:
|- "i":忽略字母大小写;
|- "m"多行查找;
|- "x":空白字符串除了被转义的或在字符类中意外的完全被忽略;
|- "s":匹配所有的字符(圆点、"."),包括换行内容。
|- 需要注意的是,如果是直接使用(javascript)那么只能够使用i和m,而"x"和"s"必须使用"$regex"。
查询 title 包含"教"字的文档:
db.students.find({name:/教/})
db.students.find({name:/教/i})
db.students.find({"name":{"$regex":/教/i}})
查询 title 字段以"教"字开头的文档:
db.students.find({title:/^教/})
查询 titl e字段以"教"字结尾的文档:
db.students.find({title:/教$/})
数组查询:$all、$size、$slice、$elemMatch
db.students.insert({"name":"大神-A","course":["语文","数学","英语","政治","历史"]});
1:单个元素匹配,就跟前面写条件一样,{key:value}
db.students.find({"course":"语文"}).pretty();
2:多个元素匹配,使用$all, {key:{$all:[a,b]}},元素的顺序无所谓
--查询同时有语文、数学的课程
db.students.find({"course":{"$all":["语文","数学"]}});
3:可以使用索引指定查询数组特定位置, {"key.索引号":value}
--查询数组中第二个内容(index= 1,索引下标从0开始)为数学的信息
db.students.find({"course.1":"数学"});
4:查询某个长度的数组,使用$size
--要求查询出只参加两门课程的学生
db.students.find({"course":{"$size":2}})
5:指定子集,使用$slice,正数是前面多少条,负数是尾部多少条,也可以指定偏
--返回年龄为19岁所有学生的信息,但是要求只显示前两门参加课程
db.students.find({"age":19},{"course":{"$slice":2});
--返回年龄为19岁所有学生的信息,但是要求只显示后两门参加课程
db.students.find({"age":19},{"course":{"$slice":-2});
--取出中间部分的信息【第一个数据表示跳过的数据量,而第二个数据表示返回的数量】
db.students.find({"age":19},{"course":{"$slice":[1,2]});
6:可以使用$来指定符合条件的任意一个数组元素,如:{"users.$":1}
7:$elemMatch:要求同时使用多个条件语句来对一个数组元素进行比较判断
数组范围查询-- 例如 大于4小于5 应该是没有值的 匹配规则是数大于4的有没有、小于4的有没有
查询内嵌文档
1:查询整个内嵌文档与普通查询是一样的
2:如果要指定键值匹配,可以使用"." 操作符,比如:{"name.first":"a" ,"name.last":"b"}
3:如果要正确的指定一组条件,那就需要使用$elemMatch,以实现对内嵌文档的多个键进行匹配操作
注意:内嵌文档的查询必须要整个文档完全匹配
条件过滤__$where {了解}
在查询中执行任意的JavaScript,通过编程来解决查询的匹配问题,方法返回boolean值。
function t1(){
for(var a in this){
if(a.name=="张三--学生"){
return true;
}
}
return false;
}
使用的时候:db.users.find({"$where":t1});
注意:$where性能较差,安全性也是问题,所以不到万不得已,不要使用
数据排序sort
在MongoDB里面数据的排序操作使用"sort()"函数,在进行排序的时候可以有两个顺序:升序(1)、降序(-1)。
范例:数据排序
db.students.find().sort({"score":-1});
但是在进行排序的过程里面有一种方式称为自然排序,按照数据保存的先后顺序排序,使用"$natural"表示。
范例:自然排序
db.students.find().sort({"$natural":-1});
查询记录条数的命令:count
1:直接使用count()的话,得到的是整个记录的条数
db.students.find().count(); --共6条数据
db.students.find().limit(2).count();--共6条数据
2:如果要获取按条件查询后记录的条数,需要指定count(true或者非0的数)
限制返回的记录条数的命令:limit(要返回的条数)
db.students.find().limit(2).count(true);--共2条数据
限制返回的记录条数起点的命令:skip(从第几条开始返回)
db.students.find().skip(4).limit(2);--返回跳过前四条之后的2条数据【5、6】
排序的命令:sort({要排序的字段:1为升序,-1为降序})
1:可以对多个字段进行排序
db.students.find().sort({"name":1});
2:MongoDB处理不同类型的数据是有一定顺序的,有时候一个键有多种类型的值,其排序顺序是预先定义好的,从小到大如下:
(1)最小值(2)null (3)数字(4)字符串(5)对象/文档(6)数组(7)二进制数据(8)对象id(9)布尔类型(10)日期型(11)时间戳(12)正则表达式(13)最大值
分页查询:组合使用limit,skip和sort
当然也可以使用其他方式来分页,比如采用自定义的id,然后根据id来分页
查询给定键的所有不重复的数据,命令:distinct
语法:db.runCommand({"distinct":集合名,"key":"获得不重复数据的字段"});
游标【不推荐使用】
1:获取游标,示例如下:
var c = db.users.find();
2:循环游标,可以用集合的方式,示例如下:
while(c.hasNext()){
printjson(c.next());
}
3:也可以使用forEach来循环,示例如下:
c.forEach(function(obj){
print(obj);
});
存储过程【不推荐使用】
1:MongoDB的存储过程其实就是个自定义的js函数
2:使用db.system.js.save({"_id":名称,value:函数});
3:可以通过如下命令查看:db.system.js.find();
4:可以通过如下命令调用:db.eval(名称);
var addF = function(a,b){
return a+b;
};
db.system.js.save({"_id":"MyF","value":addF});
db.system.js.find();
db.eval("MyF(3,5)");
转载于:https://www.cnblogs.com/Lucky-stars/p/10548662.html
第11章:MongoDB-CRUD操作--文档--查询相关推荐
- spring mongodb内嵌文档查询
spring mongodb内嵌文档查询 代码示例 简化写法 spring mongodb内嵌文档查询示例. {"name": "zsParent", &quo ...
- MongoDB内嵌文档查询
MongoDB内嵌文档查询 示例数据结构 [{"name": "lisa", "age": 17,"friends": ...
- 第07章:MongoDB-CRUD操作--文档--创建
①语法 insert() save() --有修改没有新增 insertOne() [3.2版本新增]向指定集合中插入一条文档数据 insertMany() [3.2版本新增]向指定集合中插入多条文 ...
- MongoDB文档查询操作(三)
关于MongoDB中的查询,我们已经连着介绍了两篇文章了,本文我们来介绍另外一个查询概念游标. 本文是MongoDB系列的第七篇文章,了解前面的文章有助于更好的理解本文: 1.Linux上安装Mong ...
- ContextCapture User Guide V4.4.11 Welcome(Smart3D 帮助文档 第一章 欢迎)
一.导言 欢迎阅读ContextCapture用户指南.ContextCapture是一种根据简单照片或者点云来生成高分辨率的3d模型的软件解决方案,且不需要任何人工干预.ContextCapture ...
- ContextCapture User Guide V4.4.11 ContextCapture(Smart3D 帮助文档 第三章 认识软件)
一.准则 ContextCapture使用一组取自不同视点的静态数码照片作为输入数据. 可以提供各种不同的额外数据:相机属性(焦距.传感器尺寸.主点.镜头失真),照片位置(GPS).照片旋转(INS) ...
- mysql mongodb 事务_MySQL PK MongoDB:多文档事务支持,谁更友好?
原标题:MySQL PK MongoDB:多文档事务支持,谁更友好? 作者介绍 贺春旸,凡普金科DBA团队负责人,<MySQL管理之道:性能调优.高可用与监控>第一.二版作者,曾任职于中国 ...
- 【Mongo】MongoDB文档查询
系列文章索引: [Mongo]初步认识MongoDB shell [Mongo]MongoDB文档的增删改操作 数据查询 find()方法 方法说明 find()方法没有参数时会匹配集合中的所有内容, ...
- Python+Streamlit aggrid+MongoDB GridFS构建低代码文档管理应用(文档查询下载实用篇)
1. Sreamlit aggrid简介 Sreamlit aggrid是Streamlit的Ag-Grid组件的实现,在Python Streamlit框架下,更加灵活的使用表格,包括分组.排序.编 ...
最新文章
- 【数字信号处理】序列傅里叶变换 ( 基本序列的傅里叶变换 | 求 cosωn 的傅里叶变换 | 复变函数欧拉公式 )
- 在Eclipse中使用Maven 2.x指南
- matlab narxnet,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
- [转]IIS7全新管理工具AppCmd.exe的命令使用
- CodeForces 1065E. Side Transmutations 计数
- 时序数据库influxdb+grafana
- Linux安装Nginx1.7.4、php5.5.15和配置
- 国家开放大学英语和计算机考试答案,最新电大国家开放大学《人文英语》网络核心课形考网考作业试题及答案...
- 联想java笔试题20190618
- 查看jdk的版本以及路径
- HTTP协议发展历史
- 权威高清24色图(2种颜色叫不上名,青专业人士指点)-制作不易,对你有帮助麻烦点个赞
- web点播VOD m3u8播放识别为live流 播放几个.ts切片停止播放 排错
- 数据结构---第四章:串
- 金融知识入门之基金基础概念
- 怎样给电脑文件夹批量快速重新命名?
- 微信小程序下载二进制流图片并转base64位图为png格式
- java.library.path和LD_LIBRARY_PATH的介绍与区别
- 如何搭建一个爬虫代理服务?
- Python之turtle库画各种有趣的图及源码(更新中)
热门文章
- 安师大计算机与信息学院导师,安徽师范大学数学计算机科学学院导师介绍:罗永龙...
- python 递归目录_Python3:递归实现输出目录下所有的文件
- adding oracle jvm 慢,java – 什么JVM优化导致这些性能结果?
- mysql left join 空值_MYSQL Left Join如何选择NULL值?
- 【数据库】索引优化策略
- 字节跳动最新开源!沈阳java培训哪个好
- 字节跳动技术整理:mysql查询重复数据sql
- java超市管理系统项目,HR的话扎心了
- 哈尔滨理工大学ACM集训第二周总结
- 习题2.5 两个有序链表序列的合并 (15 分)