mongodb查询和聚合函数查询
查询
格式:db.集合名.find() 格式化查询:db.集合名.find().pretty() db.集合名.findone()只查找一条记录
比较运算符
大于 $gt 小于 $lt 大于等于 $gte 小于等于 $lte 等于 : 不等于 $ne***
条件查询:db.集合名.find({键:“值”}) 例:db.student.find({name:“张三”,age:22}) 多条件查询 条件1 and 条件2 例:db.student.find({age:{ g t e : 20 , gte:20, gte:20,lte:30}})查询年龄大于等于30和年龄小于等于20的学生
条件1 or 条件2
```powershell 例:db.student.find({$or:[{age:{$lte:18}},{age:{$gte:22}}],sex:"女"})
查询年龄小于等于18岁的学生或者年龄大于等于22岁,性别为女的学生。 **行数查询是:limit() 跳过查询:skip()** db.集合名.find().limit(行数).skip(行数) limit指查询多少行就填多少(例:查询11行到20行为10) skip行数指(跳过前多少行) 例:查看student集合中的第21条到30条数据 db.student.find().limit(10).skip(20) 排序:sort(1/-1)1为升序,-1为降序 格式:db.集合的名字.find().sort({键:1或者-1}) ## 聚合函数 aggregate() 聚合方法:db.集合名.aggregate([{管道:{几聚合函数表达式}}]) $sum 求和 $avg 求平均值 $max 求最大值 $min 求最小值 管道操作符 $project 修改文档的结构 $match 条件的声明 $group 分组统计 $limit 行数限定 $skip 跳过记录 $sort 排序 ********$skip和$limit同时使用,$skip放前,$limit放后******** 例: **分组查询** ```powershell //统计男生和女生的总成绩 $sum $group sex db.student.aggregate([{$group:{_id:"$sex",he:{$sum:"grade"}}}])
//统计一下平均分,最高分,最低分
db.student.aggregate([{ $group:{ _id:null,fenshu:{ $avg:"grade"}}}]) db.student.aggregate([{ $group:{ _id:null,fenshu:{ $max:"$grade"}}}]) db.student.aggregate([{ $group:{ _id:null,fenshu:{ $min:"$grade"}}}])
//统计男生和女生的平均分各是多少?
db.student.aggregate([{ $group:{ _id:"$sex",fenshu:{ $avg:"$grade"}}}])
// 统计男生和女生各有多少人
count(*)=$sum:1 db.student.aggregate([{ $group:{ _id:"$sex",renshu:{ $sum:1}}}])
//求学生的总数和平均分
$sum:1 $avg db.student.aggregate([{ $group:{ _id:null,zongshu:{ $sum:1},pingjun:{ $avg:"$grade"}}}])
//查询男生和女生的人数,按人数升序排列
总人数$sum:1 分组:$group 性别 排序:$sort:1 -1 db.student.aggregate([{ $group:{ _id:s$ex,renshu:{ $sum:1}}},{ $sort:{ renshu:1}}])
//查看年龄大于等于20,只看两条记录
age:{ $gte:20} 从第二条数据开始查看 db.student.aggregate([{ $match:{ age:{ $gte:20}}},{ $skip:1},{ $limit:2}]) //$skip和$limit同时使用,$skip放前
函数条件查询
//查看男生的最高成绩 $group $max 条件:只看男生 $match db.student.aggregate([{ $match:{ sex:"男"}},{ $group:{ _id:"$sex",chengji:{ $max:"$grade"}}}]) //1)$project实例:修改文档结构,只含有_id,name和age三个字段。 db.student.aggregate([{ $project:{ name:1,age:1}}]) //2)$match实例:获取分数大于70小于或等于90记录 db.student.aggregate( [{ $match : { grade : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } }] ); //3)$skip实例:前五个文档"过滤"掉。 db.student.aggregate( { $skip : 5 });