数据查询
基本查询
方法 find(): 查询
db. 集合名称. find({条件文档})
方法 findOne(): 查询, 只返回第一个
db. 集合名称. findOne({条件文档})
方法 pretty(): 将结果格式化
db. 集合名称. find({条件文档}).pretty()
比较运算符
等于, 默认是等于判断, 没有运算符
小于 $lt
小于或等于 $lte
大于 $gt
大于或等于 $gte
不等于 $ne
例 1: 查询名称等于'gj'的学生
db.stu.find({name:'gj'})
例 2: 查询年龄大于或等于 18 的学生
db.stu.find({age:{$gte:18}})
逻辑运算符
查询时可以有多个条件, 多个条件之间需要通过逻辑运算符连接
逻辑与: 默认是逻辑与的关系
例 3: 查询年龄大于或等于 18, 并且性别为 1 的学生
db.stu.find({age:{$gte:18},gender:1})
逻辑或: 使用 $or
例 4: 查询年龄大于 18, 或性别为 0 的学生
db.stu.find({$or:[{age:{$gt:18}},{gender:1}]})
and 和 or 一起使用
例 5: 查询年龄大于 18 或性别为 0 的学生, 并且学生的姓名为 gj
db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})
范围运算符
使用 "$in","$nin" 判断是否在某个范围内
例 6: 查询年龄为 18,28 的学生
db.stu.find({age:{$in:[18,28]}})
支持正则表达式
使用 // 或 $regex 编写正则表达式
例 7: 查询姓黄的学生
- db.stu.find({
- name:/^ 黄 /
- })
- db.stu.find({
- name:{
- $regex:'^ 黄'
- }
- }})
自定义查询
使用 $where 后面写一个函数, 返回满足条件的数据
例 7: 查询年龄大于 30 的学生
db.stu.find({$where:function(){return this.age>20}})
1. limit 和 skip
Limit
方法 limit(): 用于读取指定数量的文档
语法:
db. 集合名称. find().limit(NUMBER)
参数 NUMBER 表示要获取文档的条数
如果没有指定参数则显示集合中的所有文档
例 1: 查询 2 条学生信息
- db.stu.find().limit(2)
- skip
方法 skip(): 用于跳过指定数量的文档
语法:
db. 集合名称. find().skip(NUMBER)
参数 NUMBER 表示跳过的记录条数, 默认值为 0
例 2: 查询从第 3 条开始的学生信息
db.stu.find().skip(2)
2. 投影
在查询到的返回结果中, 只选择必要的字段, 而不是选择一个文档的整个字段
如: 一个文档有 5 个字段, 需要显示只有 3 个, 投影其中 3 个字段即可
语法:
参数为字段与值, 值为 1 表示显示, 值为 0 不显示
db. 集合名称. find({},{字段名称: 1,...})
对于需要显示的字段, 设置为 1 即可, 不设置即为不显示
特殊: 对于_id 列默认是显示的, 如果不显示需要明确设置为 0
例 1
db.stu.find({},{name:1,gender:1})
例 2
db.stu.find({},{_id:0,name:1,gender:1})
3. 排序
方法 sort(), 用于对结果集进行排序
语法
db. 集合名称. find().sort({字段: 1,...})
参数 1 为升序排列
参数 - 1 为降序排列
例 1: 根据性别降序, 再根据年龄升序
db.stu.find().sort({gender:-1,age:1})
4. 统计个数
方法 count() 用于统计结果集中文档条数
语法
db. 集合名称. find({条件}).count()
也可以与为
db. 集合名称. count({条件})
例 1: 统计男生人数
db.stu.find({gender:1}).count()
例 2: 统计年龄大于 20 的男生人数
db.stu.count({age:{$gt:20},gender:1})
5. 消除重复
方法 distinct() 对数据进行去重
语法
db. 集合名称. distinct('去重字段',{条件})
例 1: 查找年龄大于 18 的性别 (去重)
db.stu.distinct('gender',{age:{$gt:18}})
来源: http://www.bubuko.com/infodetail-3389033.html