数据查询
- 方法find():查询
db.集合名称.find({条件文档}) - 方法find():查询,只返回第一个
db.集合名称.findOne({条件文档}) - 方法pretty():将结果格式化
db.集合.find({条件文档}).pretty()
比较运算符
- 等于:默认是等于判断,没有运算符
- 小于:$lt(less than)
- 小于等于:$lte(less than equal)
- 大于等于:$gte
- 不等于:$ne
db.stu.find({age:{$gte:18}})
范围运算符
使用"$in","$nin"判断是否在某个范围内
查询年龄为18、28的学生
db.stu.find({age:{$in:{19,28,38}}})
$not
语法: { field: { $not: {
$nor额外比较
考虑入校操作:
db.inventory.find( { $nor: [ { price: 1.99 }, { qty: { $lt: 20 } }, { sale: true } ] }
inventory集合查询所有的文档,条件如下:
字段price不等于1.99,字段qty不小于20,字段sale不等于true;查询的结果包含不存在的字段;
逻辑运算符
- and:在json中写多个条件即可查询年龄大于或等于18,并且性别为true的学生
db.stu.find({age:{$gte:18},gender:true})
- or:使用$or,值为数组,数组中每个元素为json查询年龄大于18,或性别为false的学生
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
- 查询年龄大于18或性别为男生,并且姓名是郭靖
db.stu.find({$or:[{age:{$gt:18}},{gender:true}],name:'gj'})
支持正则表达式
使用//或$regex编写正则表达式
查询姓黄的学生
db.produces.find({sku:/^abc/})
db.produces.find({sku:{$regex:'789$'})
limit和skip
- 方法limit():用于读取指定数量的文档
db.集合名称.find().limit(NUMBER)
查询2条学生信息
db.stu.find().limit(2)
- 方法skip():用于跳过指定数量的文档
db.集合名称.find().skip(NUMBER)
db.stu.find().skip(2)
- 同时使用
db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)
自定义查询
使用$where后面写一个函数,返回满足条件的数据查询年龄大于30的学生
db.stu.find({
$where:function() {
return this.age>30;
}
})
投影
在查询到的返回结果中,只选择必要的字段
db.集合名称.find({},{字段名称:1,...})
参数为字段与值,值为1表示显示,值为0不显
特殊:对于_id列默认是显示的,如果不显示需要明确设置为0
db.stu.find({},{_id:0,name:1,gender:1})
排序
方法sort(),用于对集进行排序
db.集合名称.find().sort({字段:1,...})
参数1为升序排列
参数-1为降序排列
根据性别降序,再根据年龄升序
db.stu.find().sort({gender:-1,age:1})
统计个数
方法count()用于统计结果集中文档条数
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
db.stu.find({gender:true}).count()
db.tu.count({age:{$gt:20},gender:true})
消除重复
方法distinct()对数据进行去重
db.集合名称.distinct('去重字段',{条件})
db.stu.distinct('distinct',{age:{$gt:18}})