准备数据
db.stu.insert({name:'郭靖',hometown:'蒙古',age:20,gender:true})
db.stu.insert({name:'黄蓉',hometown:'桃花岛',age:18,gender:false})
db.stu.insert({name:'杨康',hometown:'大金',age:20,gender:true})
db.stu.insert({name:'穆念慈',hometown:'大宋',age:18,gender:false})
db.stu.insert({name:'东邪',hometown:'桃花岛',age:40,gender:true})
db.stu.insert({name:'西毒',hometown:'西域',age:41,gender:true})
db.stu.insert({name:'南帝',hometown:'大理',age:42,gender:true})
db.stu.insert({name:'北丐',hometown:'大宋',age:45,gender:true})
db.stu.insert({name:'小甲',hometown:'大宋',age:45,gender:false})
db.stu.insert({name:'中神通',hometown:'全真教',age:44,gender:true})
基本查询
-
方法 find()
db.集合名称.find({条件文档})
-
方法 findOne() 查询,只返回第一个
db.集合名称.findOne({条件文档})
-
方法pretty() 将结果格式化
db.集合名称.find({条件文档}).pretty()
比较运算符
-
等于,默认就是等于判断,没有运算符
db.stu.find({age:18}) //查询所有年龄是18的同学
-
小于:$lt
db.stu.find({age:{$lt:18}}) //查询年龄小于18的同学
-
小于等于:$lte
db.stu.find({age:{$lte:18}}) //查询年龄小于等于18的同学
-
大于: $gt
db.stu.find({age:{$gt:18}}) //查询年龄大于18的同学
-
大于等于: $gte
db.stu.find({age:{$gte:18}}) //查询大于等于18的同学
-
不等于: $ne
db.stu.find({age:{$ne:18}}) //查询年龄不等于18的同学
逻辑运算符
-
查询时有多个条件,多个条件之间需要通过逻辑运算符来连接
-
逻辑与:默认的是逻辑与的关系
// 查询年龄大于或等于18,并且性别为true的学生 db.stu.find({age:{$gte:18},gender:true})
-
逻辑或:使用$or,值为数组,数组中每个元素为json
// 查询年龄大于18,或性别为false的学生 db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
-
and和or一起使用
// 查询年龄大于18或性别为true的学生,并且学生的姓名为郭靖 db.stu.find({$or:[{age:{$ge:18}},{gender:true}],name:'郭靖'})
范围运算符
-
使用$in,$nin判断是否在某个范围内
// 查询年龄为18,28的学生 db.stu.find({age:{$in:[18,28]}})
正则表达式查询
-
mongodb提供的终端shell,同时也是一个js的执行器,可以编写js的代码和函数
-
使用//或$regex编写正则表达式
// 查询姓黄的同学 db.stu.find({name:/^黄/}) db.stu.find({name:{$regex:'^黄'}})
自定义查询
-
使用$where后面写一个函数,返回满足条件的数据
db.stu.find( { $where: function(){ return this.age>30 } } )
Limit和skip
-
limit():用于读取指定数量的文档
db.集合名称.find().limit(number)
- 参数number:表示要读取文档的条数
- 没有指定Number则显示集合中所有文档
// 显示前两条学生的信息 db.stu.find().limit(3)
-
skip:用于跳过指定数量的文档
db.集合名称.find().skip(number)
- 参数number表示跳过的记录条数,默认值为0
-
limit和skip可以一起使用,不分先后顺序。
投影
-
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
-
语法:
// 参数为字段与值,值为1表示显示,值为0不显示 db.集合名称.find({},{字段名称:1,...})
-
对于需要显示的字段,设置为1即可,不设置即为不显示
-
特殊:对于_id列默认是显示的,如果不显示需要明确设置为0
排序
-
方法sort(),用于对结果集进行排序
db.集合名称.find().sort({字段:1,...})
-
参数1为升序排列
-
参数-1为降序排列
// 排序 age 从小到大 db.stu.find({},{name:1,age:1}).sort({age:1})
统计个数
-
方法count()用于统计结果集中文档条数
db.集合名称.find({条件}).count() db.集合名称.count({条件})
-
例子
// 统计age大于18 的总人数 db.stu.find({age:{$gt:18}}).count() db.stu.count({age:{$gt:18}})
消除重复
-
方法distinct()对数据进行去重
db.集合名称.distinct('去重字段',{条件})
-
例子:
// 查找年龄大于18的学生,来自哪些省份 db.stu.distinct('hometown',{age:{$gt:18}})