查询全部 ​

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数据查询详解的更多相关文章

  1. Hive 学习之路(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件emp.txt和dept.txt可以从本仓库的resources目录下载. 1.1 员工表 -- 建表语句 CREAT ...

  2. Hive 系列(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...

  3. 入门大数据---Hive数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...

  4. django orm 数据查询详解

    一 在django里面创建模型 from django.db import models class Blog(models.Model): name = models.CharField(max_l ...

  5. MongoDB状态查询详解:db.serverStatus()

    https://www.2cto.com/database/201501/370191.html

  6. ElasticSearch第四步-查询详解

    ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...

  7. ContentProvider数据访问详解

    ContentProvider数据访问详解 Android官方指出的数据存储方式总共有五种:Shared Preferences.网络存储.文件存储.外储存储.SQLite,这些存储方式一般都只是在一 ...

  8. Solr安装入门、查询详解

    Solr安装入门:http://www.importnew.com/12607.html 查询详解:http://www.360doc.com/content/14/0306/18/203871_35 ...

  9. ThinkPHP视图查询详解

    ThinkPHP视图查询详解 参考http://www.jb51.net/article/51674.htm   这篇文章主要介绍了ThinkPHP视图查询,需要的朋友可以参考下     ThinkP ...

随机推荐

  1. bzoj4032: [HEOI2015]最短不公共子串(SAM+DP)

    4032: [HEOI2015]最短不公共子串 题目:传送门 题解: 陈年老题良心%你赛膜爆嘎爷 当初做题...一眼SAM...结果只会两种直接DP的情况... 情况1: 直接设f[i][j] 表示的 ...

  2. 机器学习 数据量不足问题----1 做好特征工程 2 不要用太多的特征 3 做好交叉验证 使用线性svm

    来自:https://www.zhihu.com/question/35649122 其实这里所说的数据量不足,可以换一种方式去理解:在维度高的情况下,数据相对少.举一个特例,比如只有一维,和1万个数 ...

  3. nyoj--120--校园网络(scc+缩点)

    校园网络 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 南阳理工学院共有M个系,分别编号1~M,其中各个系之间达成有一定的协议,如果某系有新软件可用时,该系将允许一些其 ...

  4. 【BZOJ 2038】小Z的袜子

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2038 [算法] 莫队算法 [代码] #include<bits/stdc++. ...

  5. 2.linux系统命令详解

    1 shell shell:命令解释器,根据输入的命令执行相应命令. 1.1 shell家族 察看当前系统下有哪些shell: cat /etc/shells 察看当前系统正在使用的shell ech ...

  6. ROS-VIM

    在终端输入:vimtutor,进入学习教程. 常用快捷键: a 编辑模式; 编辑状态下 回车 换行; Ctrl+n 补全命令; x剪切; p复制; u撤销; :q!不保存退出; :wq保存并退出; 以 ...

  7. POJ 3628 01背包 OR 状压

    思路: 1.01背包 先找到所有奶牛身高和与B的差. 然后做一次01背包即可 01背包的容积和价格就是奶牛们身高. 最后差值一减输出结果就大功告成啦! 2. 搜索 这思路很明了吧... 搜索的确可以过 ...

  8. P2740 [USACO4.2]草地排水Drainage Ditches

    题目背景 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没 ...

  9. Hello World Spring MVC

    1, Setup Development Environment 1.1, Java SDK | ~ @ yvan-mac (yvan) | => java -version java vers ...

  10. SpringMVC视频

    视频内容: 1.下载spring mvc以及spring mvc示例演示http://pan.baidu.com/s/1kTHRfDH 2.配置完善&初步探究控制器拦截http://pan.b ...