MongoDB的高级查询
一.find
在MongoDB中find()方法:
db.集合名称.find({文档条件});
#若find中括号里没有参数,就查询输出整个集合的信息。
#若find中括号里有参数,就根据其条件,输出筛选后的信息。
findOne()方法,返回第一个符合条件的数据。
db.集合名称.findOne();
其中若觉得输出的结果不好看,则可以使用pretty()方法,进行美化结果。
db.集合名称.find({文档条件}).pretty();
二.比较运算符
-
等于:默认是等于判断,没有运算符,
-
小于:$lt,
-
小于等于:$lte,
-
大于:$gt,
-
大于等于:$gte,
-
不等于:$ne,
#等于
db.stu.find({age:26,sex:"男"}); #其中的","代表 and!
#小于
db.stu.find({age:{$lt:26}});
#小于等于
db.stu.find({age:{$lte:26}});
#大于
db.stu.find({age:{$gt:26}});
#大于等于
db.stu.find({age:{$gte:26}});
#不等于
db.stu.find({age:{$ne:26}});
三.范围运算符
使用"$in","$nin",可以判断在某一个范围之间。
#$in
#可以筛选出age为18或者26的
db.stu.find({age:{$in:[18,26]}})
#$nin
#可以筛选出age不为18,26的
db.stu.find({age:{$nin:[18,26]}})
四.逻辑运算符
and 与 or 的使用。
#and
#选出age < 26 并且 sex为男
db.stu.find{age:{$lt:26},sex:"男"};
#or
#选出 age > 20 或者 sex 为 男的
db.stu.find({$or:[{age:{$gt:20}},{sex:"男"}]});
五.limit与skip
limit()
用与读取指定数量的文档
db.stu.find().limit(2);
#读取两条数据。
skip()
用于跳过指定数量的文档
db.stu.find().skip(2);
#跳过两条数据,读取之后的符合条件的信息。
skip()与limit()也可以同时使用。
#先跳过两条数据,载选取之后的两条。
db.stu.find().skip(2).limit(2);
注意:
若数据量较大,应该先skip() ,再limit();
六.自定义查询
使用$where后面加一个函数,返回满足条件的数据。
语法格式:
$where:function(){}
#其中“{}”里面,写JavaScript语句。
例如下面的例子:
查询年龄大于等于18的学生。
db.stu.find(
$where:function(){
return this.age >= 18;
}
)
七.投影
在查询到的返回结果中,只选择必要的字段。
db.stu.find({},{字段1:1,字段2:1 .......});
参数为字段与值,值为1,则显示;若不写就不会显示。
其中:"_id"是默认显示的;若要不显示"_id",则需明确设置为0即可。
例如:
db.stu.find({},{name:1,age:1})
db.stu.find({},{_id:0,age:1,name:1});
其中不难发现,在"{ }"中,改变age与name的顺序,不会影响查询结果的原有数据排列次序。
八.排序
方法sort(),用于对集合进行排序。
参数1为升序。
参数-1为降序。
#以age的升序来排序
db.stu.find(...).sort({age:1});
#以age的降序来排序
db.stu.find(...).sort({age:1});
九.统计个数
方法count(),用于统计结果集中文档条数。
db.stu.find({条件}).count();
db.stu.count({条件});
count()为聚合函数,具体内容在下一个章节中说明。
具体使用例子:
db.stu.find({sex:"男"}).count();
与之等价的:
db.stu.count({sex:"男"});
十.消除重复
方法distinct()对数据进行去重。
db.stu.distinct('去重字段':{条件});
例如:
去除重复的age值:
db.stu.distinct('age');
去除age大于20的所有重复值:
db.stu.distinct('age':{age:{$gt20}})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)