(4)--MongoDB--数据查询

核心

db.集合.find({查询条件},[{设置显示字段}])

已存在数据如图
在这里插入图片描述

带条件查询

db.fnfos.find({"url":"www.google.com"})

在这里插入图片描述

查询结果只显示个别字段

0表示不显示  1表示显示

db.fnfos.find({"url":"www.google.com"},{"_id":0});

在这里插入图片描述

db.fnfos.find({"url":"www.google.com"},{"_id":0,"url":1});

在这里插入图片描述

优雅显示 pretty()

列数多时,可看出效果

db.fnfos.find({"url":"www.google.com"},{"_id":0,"url":1}).pretty();

关系查询

不等于$ne
大于$gt
小于$lt
大于等于$gte
小于等于$lte
等于key:value 、$eq

准备操作案例集合

db.students.drop()
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":"张三"}).pretty();

在这里插入图片描述

db.students.find({"sex":"男"}).pretty();

在这里插入图片描述

小于

db.students.find({"age":{"$gt":19}}).pretty();

年龄大于19岁的学生
在这里插入图片描述

db.students.find({"score":{"$lte":60}}).pretty();

成绩小于等于60分的学生
在这里插入图片描述

不等于

db.students.find({"name":{"$ne":"王五"}}).pretty();

查询名字不是王五的学生
在这里插入图片描述

逻辑查询

与 操作

用逗号(,)分隔若干条件

db.students.find({"age":{"$gte":19,"$lte":20}}).pretty();

查询年龄大于等于19岁 并且 小于等于20岁的学生
在这里插入图片描述

非 操作

db.students.find({"age":{"$ne":19}}).pretty();

查询年龄不是19岁的学生
在这里插入图片描述

或 操作

db.students.find({
	"$or":[
		{"age":{"$gt":19}},
		{"score":{"$gt":90}}
		]
	}).pretty();

查询年龄大于19岁,或者成绩大于90分的学生信息
在这里插入图片描述

或非 操作

db.students.find({
	"$nor":[
		{"age":{"$gt":19}},
		{"score":{"$gt":90}}
		]
	}).pretty();

在这里插入图片描述

模运算

{$mod:[数字,余数]}

db.students.find({"age":{"$mod":[20,0]}}).pretty();

查询 年龄 20并且余数为0 的学生
在这里插入图片描述

db.students.find({"age":{"$mod":[20,1]}}).pretty();

查询 年龄 20并且余数为1 的学生
在这里插入图片描述

范围查询

在范围之中$in
不在范围之中$nin
db.students.find({"name":{"$in":["张三","李四","王五"]}}).pretty();

查询信息为 张三,李四,王五 的信息
在这里插入图片描述
不在范围之内

db.students.find({"name":{"$nin":["张三","李四","王五"]}}).pretty();

数组(列表)查询

添加一些含有数组(列表)的案例操作的集合数据

db.students.insert({"name":"Wilson","sex":"男","age":19,"score":89,"address":"海淀区","course":["语文","数学","英语","音乐","政治"]});
db.students.insert({"name":"Wilson","sex":"男","age":19,"score":89,"address":"海淀区","course":["语文","数学"]});
db.students.insert({"name":"Wilson","sex":"男","age":19,"score":89,"address":"海淀区","course":["语文","数学","英语"]});
db.students.insert({"name":"Wilson","sex":"男","age":19,"score":89,"address":"海淀区","course":["英语","音乐","政治"]});
db.students.insert({"name":"Wilson","sex":"男","age":19,"score":89,"address":"海淀区","course":["语文","政治"]});

{"$all",[内容1,内容2]}

db.students.find({"course":{"$all":["语文","数学"]}}).pretty();

查询同时参加语文和数学课程的学生

在这里插入图片描述
$all 可以用于查询数组,也可用于一个数据的匹配

db.students.find({"address":{"$all":["海淀区"]}}).pretty();

在这里插入图片描述

$size 数组(列表) 数目

db.students.find({"course":{"$size":2}}).pretty();

查询出参加两门课程的学生
在这里插入图片描述

$slice 控制 数组(列表) 返回数目

db.students.find({"age":19},{"course":{"$slice":2}}).pretty();

年龄为19岁所有学生信息,但课程只显示两门(前两门)
在这里插入图片描述
年龄为19岁所有学生信息,但课程只显示后两门,设置负数

db.students.find({"age":19},{"course":{"$slice":-2}}).pretty();

中间两门课程

db.students.find({"age":19},{"course":{"$slice":[1,2]}}).pretty();

利用 索引 查询集合中数组(列表)

key.index 方式定义索引 (0 起始)

db.students.find({"course.1":"数学"}).pretty();

查询数组(列表)中第二个内容(index = 1)
在这里插入图片描述

嵌套集合

准备案例操作的集合数据

db.students.insert({"name":"大拿 -A","sex":"男","age":19,"score":89,"address":"海淀区","course":["语文","数学","英语","音乐","政治"],"parents":[{"name":"大拿-A(父亲)","age":50,"job":"工人"},{"name":"大拿-A(母亲)","age":46,"job":"职员"}]});
db.students.insert({"name":"大拿 -B","sex":"男","age":19,"score":89,"address":"海淀区","course":["语文","数学"],"parents":[{"name":"大拿-B(父亲)","age":50,"job":"处长"},{"name":"大拿-B(母亲)","age":46,"job":"局长"}]});
db.students.insert({"name":"大拿 -C","sex":"男","age":19,"score":89,"address":"海淀区","course":["语文","数学","英语"],"parents":[{"name":"大拿-C(父亲)","age":50,"job":"工人"},{"name":"大拿-C(母亲)","age":46,"job":"局长"}]});

$elemMatch

db.students.find({
	"$and":[
		{"age":{"$gte":19}},
		{"parents":{"$elemMatch":{"job":"局长"}}}
	]
}).pretty();

查询出学生年龄大于等于19岁并且父母有人是局长的信息
在这里插入图片描述

判断字段是否存在

$exists

布尔值,true字段存在,false 字段不存在

db.students.find({"parents":{"$exists":true}}).pretty();

查询有 parents 字段的 学生信息
在这里插入图片描述

db.students.find({"course":{"$exists":false}}).pretty();

查询不具有 course 字段的学生信息
在这里插入图片描述

where 条件过滤

$where

虽然这种方式实现了数据查询,但是最大的缺点是将在MongoDB里面保存的BSON数据重新变成JavaScript的语法结构,这样的方式不方便使用数据库的索引,不建议此形式使用

db.students.find({"$where":"this.age>20"}).pretty();

查询年龄大于20岁的学生信息
在这里插入图片描述
$where 是可以简化的,这类的操作是属于进行每一行的信息判断,实际上对于数据量较大的操作并不方便使用

db.students.find("this.age>20").pretty();

在这里插入图片描述
完整的写法可以如下:

db.students.find(function(){
	return this.age>20;
}).pretty();
db.students.find({
	"$where":function(){
		return this.age>20;
	}
}).pretty();

查询多个判断

db.students.find({"$and":[
		{"$where":"this.age>19"},
		{"$where":"this.age<21"}
	]
}).pretty();

查询 年龄大于19岁并且小于21岁的学生信息
在这里插入图片描述

模糊查询

使用正则运算进行模糊查询

基础语法{key:正则标记}
完整语法{key:{"$regex":正则标记,“$options”:选项}}

options主要是设置正则的信息查询的标记

  1. i 忽略字母的大小写
  2. m 多行查找
  3. x 空白字符串除了被转义的或在字符类中意外的完全被忽略
  4. s 匹配所有的字符,包括换行内容

options使用 xs 必须使用 $regex, 其他的可以不带

db.students.find({"name"://}).pretty();

匹配 以"大" 开头的姓名
在这里插入图片描述

db.students.find({"name":/a/i}).pretty();

不区分大小写 查询 名字中含有a 的学生信息
在这里插入图片描述
完整格式

db.students.find({"name":{"$regex":/a/i}}).pretty();

在这里插入图片描述

模糊查询数组(列表)中数据

db.students.find({"course"://}).pretty();

在这里插入图片描述

数据查询排序

sort() 升序(1), 降序(-1)

db.students.find().sort({"score":-1}).pretty();

查询成绩,降序排列
在这里插入图片描述

$natural 自然排序,数据保存的先后顺序

db.students.find().sort({"$natural":-1}).pretty();

自然排序的降序显示
在这里插入图片描述

数据分页显示

skip(n) 跨过多少数据行

limit(n) 取出的数据行的个数限制

db.students.find().skip(0).limit(5).sort({"age":-1}).pretty();

第一页,skip(0) 跨国0行,limit(5)显示5条数据
在这里插入图片描述

db.students.find().skip(5).limit(5).sort({"age":-1}).pretty();

第二页显示,skip(5) 跨过5行,显示5条数据
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值