mongodb数据查询-小结

mongodb数据查询
目录:
一、基本查询
二、limit和skip
三、投影
四、sort排序
五、统计个数
六、消除重复

================================================================

正文

一、基本查询
1、常用查询
(1)find():查询,返回多条文档记录
db.集合名称.find({条件文档})
db.stu.find({age:18}) # 执行后,查找到所有age为18的文档记录

(2)findOne():查询,只返回第一条文档记录
db.集合名称.findOne({条件文档})
db.stu.findOne({age:18}) # 执行后,查找到就近一条age为18的文档记录

(3)美化pretty():将结果格式化
db.集合名称.find({条件文档}).pretty()
db.stu.find({age:18}).pretty() # 执行后,将结果格式美化后显示

2、查询方式:比较运算符
等于,默认是等于判断,没有运算符
小于$lt
小于或等于$lte
大于$gt
大于或等于$gte
不等于$ne

(1)查询名称等于'郭靖'的学生
db.stu.find({name:'郭靖'})

(2)查询年龄大于或等于18的学生
db.stu.find({age:{$gte:18}}) # 执行后,显示age>=18的文档记录

3、查询方式:逻辑运算符
查询时可以有多个条件,多个条件之间需要通过逻辑运算符连接
(1)逻辑与and:默认是逻辑与的关系
例3:查询年龄大于或等于18,并且性别为true的学生
db.stu.find({age:{$gte:18},gender:true})

(2)逻辑或or:使用$or,值为数组,数组中每个元素为json
例4:查询年龄大于18,或性别为false的学生
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

(3)and和or一起使用
例5:查询年龄大于18或姓名是郭靖,并且性别为男生
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'郭靖'})

4、查询方式:范围运算符
使用"$in","$nin" 判断是否在某个范围内

例6:查询年龄为18、28的学生
db.stu.find({age:{$in:[18,28,30]}}) # 执行后,非连续,列举出age为18,28,30的所有文档记录。
db.stu.find({age:{$nin:[18,28]}}) # 执行后,非连续,列举出age不为18,28的所有文档记录。

5、查询方式:支持正则表达式
mongodb提供的终端shell,同时也是一个js的执行器,可以编写js的代码和函数
使用//或$regex编写正则表达式

例7:查询姓黄的学生
db.stu.find({name:/^黄/})
db.stu.find({name:{$regex:'^黄'}})

6、查询方式:自定义查询
使用$where后面写一个函数,返回满足条件的数据

例7:查询年龄大于30的学生。
db.stu.find({
$where:function() {
return this.age>30;
}
})

$where:后面接的是JavaScript的编程语法。
如:https://www.cnblogs.com/svennee/p/4080805.html

二、limit和skip
(1)limit
方法limit():用于读取指定数量的文档
例1:查询2条学生信息
db.stu.find().limit(2) # 执行后,显示2条文档记录

(2)skip
方法skip():用于跳过指定数量的文档
例2:查询从第3条开始的学生信息
db.stu.find().skip(2) # 执行后,除了前2条文档记录,其余的都显示出来。


(3)skip和limit一起使用
方法limit()和skip()可以一起使用,写法不分先后顺序,但是会先执行skip,后执行limit。
例如:
创建数据集
for(i=0;i<15;i++){
db.t1.insert({_id:i})
}
查询第5至8条数据
db.t1.find().limit(4).skip(5) # 执行后,skip先排除前5条,limit再从结果集中取前4条

db.t1.find().skip(5).limit(4) # 执行后,skip先排除前5条,limit再从结果集中取前4条

三、投影
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
如:一个文档有5个字段,需要显示只有3个,投影其中3个字段即可
语法:
参数为字段与值,值为1表示显示,值为0不显示
db.集合名称.find({},{字段名称:1,...})

(1)对于需要显示的字段,设置为1即可,不设置即为不显示
db.stu.find({},{name:1,gender:1})

(2)特殊:对于_id列默认是显示的,如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})


四、sort排序
方法sort(),用于对结果集进行排序
语法
db.集合名称.find().sort({字段:1,...})
参数1为升序排列
参数-1为降序排列

例1:根据性别降序,再根据年龄升序
db.stu.find().sort({gender:-1,age:1})


五、统计个数
方法count()用于统计结果集中文档条数
语法
db.集合名称.find({条件}).count()
也可以与为
db.集合名称.count({条件})

(1)统计男生人数
db.stu.find({gender:true}).count() # 返回一个数字。如:5

(2)统计年龄大于20的男生人数
db.stu.count({age:{$gt:20},gender:true}) # 返回一个数字。如:3

六、消除重复
方法distinct()对数据进行去重
语法
db.集合名称.distinct('去重字段',{条件})

例:查找年龄大于18的学生,来自哪些省份
db.stu.distinct('hometown',{age:{$gt:18}}) # 返回一个列表。如:[ "蒙古", "桃花岛", "大理", "华山" ]

原文地址:https://www.cnblogs.com/andy9468/p/12612679.html