MongoDB数据查询详解
查询全部
db.infos.find();
db.infos.find({"url":"www.baidu.com"});
id不要显示出来
db.infos.find({"url":"www.baidu.com"},{"_id":0});
关系运算
大于 $gt
小于 $lt
大于等于 $gte
小于等于 $lte
不等于 $ne
准备测试数据
db.students.insert({"name":"张三","sex":"男","age":19,"score":89,"address":"海淀区"});
db.students.insert({"name":"李四","sex":"女","age":20,"score":59,"address":"朝阳区"});
db.students.insert({"name":"王五","sex":"女","age":19,"score":99,"address":"西城区"});
db.students.insert({"name":"赵六","sex":"男","age":20,"score":100,"address":"东城区"});
db.students.insert({"name":"孙七","sex":"男","age":19,"score":20,"address":"海淀区"});
db.students.insert({"name":"王八","sex":"女","age":21,"score":0,"address":"海淀区"});
db.students.insert({"name":"刘九","sex":"男","age":19,"score":70,"address":"朝阳区"});
db.students.insert({"name":"钱十","sex":"女","age":21,"score":56,"address":"西城区"});
查询姓名为张三的学生的数据
db.students.find({"name":"张三"});
查询性别是男的学生的信息
db.students.find({"sex":"男"});
查询年龄大于19岁的学生
db.students.find({"age":{"$gt":19}});
查询成绩大于等于60分的学生
db.students.find({"score":{"$gte":60}});
查询姓名不是王五的信息
db.students.find({"name":{"$ne":"王五"}});
逻辑运算
三种类型
与 $and
或 $or
非 $nor
查询年龄在19到20之间的数据
db.students.find({"age":{"$gte":19,"$lte":20}});
查询年龄不是19的数据
db.students.find({"age":{"$ne":19}});
查询年龄大于19岁,或者成绩大于90分的学生的信息
db.students.find({
"$or": [
{"age":{"$gt":19}},
{"score":{"$gt":90}}
]
});
查询年龄不大于19或者成绩不大于90的学生的信息
db.students.find({
"$nor": [
{"age":{"$gt":19}},
{"score":{"$gt":90}}
]
});
模运算
查询年龄模20余1的数据,也就是21或者41的学生信息
db.students.find({"age":{"$mod":[20,1]}});
范围查询
$in 、 $nin
查询姓名是“张三”、“李四”、“王五”的信息。
多个数据用数组表示。
db.students.find({"name":{"$in":["张三","李四","王五"]}})
db.students.find({"name":{"$nin":["张三","李四","王五"]}})
数组查询
mongoDB支持数组保存,也支持数组匹配查询。
再插入一些数据
db.students.insert({"name":"大神 - A","sex":"女","age":21,"score":0,"address":"海淀区","course":["语文","数学","英语","音乐","政治"]});
db.students.insert({"name":"大神 - B","sex":"男","age":19,"score":70,"address":"朝阳区","course":["语文","数学"]});
db.students.insert({"name":"大神 - C","sex":"女","age":21,"score":56,"address":"西城区","course":["语文","数学","英语"]});
db.students.insert({"name":"大神 - D","sex":"女","age":21,"score":0,"address":"海淀区","course":["语文","数学","英语"]});
db.students.insert({"name":"大神 - E","sex":"男","age":19,"score":70,"address":"朝阳区","course":["英语","音乐"]});
db.students.insert({"name":"大神 - F","sex":"女","age":21,"score":56,"address":"西城区","course":["语文","数学","英语","音乐"]});
查询同时参加语文和数学课程的学生
db.students.find({"course":{"$all":["语文","数学"]}});
$all 可以用在数组查询上,也可以用于一个数据的匹配上。
查询地址是“海淀区”的信息。
db.students.find({"address":{"$all":["海淀区"]}});
范例:查询课程数组中第二个内容是音乐的用户。使用索引。
db.getCollection('students').find({"course.1":"音乐"})
范例:查询只参加两门课程的学生
db.getCollection('students').find({"course":{"$size":2}})
范例:返回年龄为19岁的学生信息,课程信息只返回两条。
db.getCollection('students').find({"age":21},{"course":{"$slice":2}})
也可以设置负数,取出后两门的数据。
db.getCollection('students').find({"age":21},{"course":{"$slice":-2}})
或者只取出中间部分的信息。
db.getCollection('students').find({"age":21},{"course":{"$slice":[1,2]}})
嵌套集合运算
再增加一些数据
db.students.insert({"name":"高大拿 - A","sex":"女","age":21,"score":0,"address":"海淀区","course":["语文","数学","英语","音乐","政治"],
"parents":
[{"name":"高大拿 - A(父亲)","age":50,"job":"工人"},
{"name":"高大拿 - A(母亲)","age":46,"job":"职员"}]
});
db.students.insert({"name":"高大拿 - B","sex":"男","age":19,"score":70,"address":"朝阳区","course":["语文","数学"],
"parents":
[{"name":"高大拿 - B(父亲)","age":50,"job":"处长"},
{"name":"高大拿 - B(母亲)","age":46,"job":"局长"}]
});
db.students.insert({"name":"高大拿 - C","sex":"女","age":21,"score":56,"address":"西城区","course":["语文","数学","英语"],
"parents":
[{"name":"高大拿 - C(父亲)","age":50,"job":"工人"},
{"name":"高大拿 - C(母亲)","age":46,"job":"局长"}]
});
范例:查询年龄是19,父母中有职务是局长的数据
db.getCollection('students').find({
"$and":[
{"age":19},
{"parents":{"$elemMatch":{"job":"局长"}}}
]
})
判断某个字段是否存在
通过 $exists来判断某个字段是否存在
范例:查询具有parents成员的数据
db.getCollection('students').find({
"parents":{"$exists":true}
})
范例:查询不具有course成员的数据
db.students.find({
"course":{"$exists":false}
})
条件过滤
$where
db.students.find({
"$where":"this.age>20"
})
db.students.find("this.age>21");
db.students.find(function() {
return this.age > 20
});
db.students.find({"$where":function() {
return this.age > 20
}});
多条件查询
db.students.find({"$and":[
{"$where":"this.age>20"},
{"$where":"this.score>20"}
]});
这里会将MongoDB的BSON格式变为JavaScript格式,不方便使用数据库索引机制。
正则运算
范例:查询以“张”开头的姓名
db.students.find({"name":/^张/});
正则不要加引号了。
范例:查询姓名有“A”的数据,加上i表示不区分大小写
db.students.find({"name":/a/i});
db.students.find({"name":{"$regex":/a/i}});
除了可以单个查询之外,还可以进行数组查询。
范例:查询数组数据中包含语文的数据
db.students.find({"course":{"$regex":/语文/}});
数据排序
通过sort()函数,升序是1,将序-1。1和-1不要加引号。
范例:按照成绩排序,成绩高的排在前面
db.students.find({"course":{"$regex":/语文/}}).sort({"score":-1});
范例:自然排序,按照数据保存的先后顺序排序
db.students.find({"course":{"$regex":/语文/}}).sort({"$natural":-1});
分页显示
两个操作函数 ⏰
skip(n):表示跨过多少数据行
limit(n):表示取出多少行
范例:分页获取数据(第一页,skip(0),limit(5)。第二页,skip(5),limit(5))
db.students.find().skip(5).limit(5);
MongoDB数据查询详解的更多相关文章
- Hive 学习之路(八)—— Hive 数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件emp.txt和dept.txt可以从本仓库的resources目录下载. 1.1 员工表 -- 建表语句 CREAT ...
- Hive 系列(八)—— Hive 数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...
- 入门大数据---Hive数据查询详解
一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...
- django orm 数据查询详解
一 在django里面创建模型 from django.db import models class Blog(models.Model): name = models.CharField(max_l ...
- MongoDB状态查询详解:db.serverStatus()
https://www.2cto.com/database/201501/370191.html
- ElasticSearch第四步-查询详解
ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...
- ContentProvider数据访问详解
ContentProvider数据访问详解 Android官方指出的数据存储方式总共有五种:Shared Preferences.网络存储.文件存储.外储存储.SQLite,这些存储方式一般都只是在一 ...
- Solr安装入门、查询详解
Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...
- ThinkPHP视图查询详解
ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm 这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下 ThinkP ...
随机推荐
- 数论TIPS(Loading...)
1.一个数的约数和=(1+p1+p12+...+p1c1)*(1+p2+p22+...+p2c2)*...*(1+pk+pk2+...+pkck)(p为这个数的各个质因数,c表示为各个质因数的次方,k ...
- hdoj--2120--Ice_cream's world I(并查集判断环)
Ice_cream's world I Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Makefile经典教程(转)
转自:http://blog.csdn.net/ruglcc/article/details/7814546/ makefile很重要 什么是makefile?或许很多Winodws的程序员都不知道这 ...
- BZOJ 4004 高斯消元
思路: 排个序 消元 完事~ 但是! 坑爹精度毁我人生 我hhhh他一脸 红红火火恍恍惚惚 //By SiriusRen #include <cmath> #include <cst ...
- BI中事实表与维度表的定义
一个典型的例子是,把逻辑业务比作一个立方体,产品维.时间维.地点维分别作为不同的坐标轴,而坐标轴的交点就是一个具体的事实.也就是说事实表是多个维度表的一个交点.而维度表是分析事实的一个窗口. 首先介绍 ...
- Firefox Quantum:开发者版本 推荐
为生民,不谋利 欢迎您使用 Firefox 开发者版本.使用此版本可获得最新功能.高速性能,以及您打造开放 Web 所需的开发工具. https://www.mozilla.org/zh-CN/fir ...
- python 3.x 学习笔记17(协程以及I/O模式)
1.协程(微线程)协程是一种用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈.因此: 协程能保留上一 ...
- 微信小程序-最新获取用户基本信息方案
如果只是单纯的展示用户信息,那么最简单的方案就是 文档中组件: <open-data type="groupName" open-gid="xxxxxx" ...
- RocketMQ学习笔记(12)----RocketMQ的Consumer API简介
由于消息的消费方式有两种,所以两种方式也有不同的API: 1. PushConsumer的配置 1. consumerGroup: 默认值为DEFAULT_CONSUMER,Consumer组名,多个 ...
- ZBrush软件特性之Edit
ZBrush®中的Edit调控板控制撤销和重做命令,它有一或两个命令设置将根据Tool工具调控板当前选择的工具而定,默认配置的命令仅有文档编辑,不过当激活一个3D工具,只针对这个工具的两个按钮设置变成 ...