第10讲 MongoDB复合查询
整体课程知识点查看 :https://blog.csdn.net/j1451284189/article/details/128713764
本讲总结
MongoDB查询展示
MongoDB复合查询
MongoDB索引查询与设置
MongoDB备份与恢复
一、MongoDB 查询结果显示
# 看特定个数
db.MyCollection.find().limit(4) #前4个
db.MyCollection.find().skip(2) #跳过前两个
db.MyCollection.find().skip(2).limit(4)
db.MyCollection.find().skip(5).limit(4)
#投影 只看特定字段
db.MyCollection.find({}, {name:1,age:1})
#统计
db.MyCollection.find({salary:false}).count()
db.MyCollection.count({salary:false})
db.MyCollection.count()
db.MyCollection.find().count()
# 排序
db.MyCollection.find().sort({'age':1}) #升序
db.MyCollection.find().sort({'age':1,'id':-1})
# 去重
db.MyCollection.distinct('age',{范围与条件}) # 去重非删除数据,只是看数据分布范围
二、MongoDB复合查询
//aggregate 聚合查询
db.MyCollection.aggregate(
[
{管道1},
{管道2}]
)
db.MyCollection.aggregate([{$group:{_id:'$salary'}}]) //$group 分组
//$group 分组
//表达式 $sum $avg $max $min $first $last $push
db.MyCollection.aggregate([
{$group:{_id:'$salary', sumage:{$sum:'$age'}}} //性别分组年龄之和 $sum求和
])
db.MyCollection.aggregate([
{$group:{_id:'$salary', avgage:{$avg:'$age'}}} //性别分组年龄 $avg平均
])
db.MyCollection.aggregate([
{$group:{_id:'$salary', maxage:{$max:'$age'}, minage:{$min:'$age'}}} // $max最大值 $min最小值
])
db.MyCollection.aggregate([
{$group:{_id:'$salary', first_age:{$first:'$age'}, last_age:{$last:'$age'}}} // $first第一个 $last最后一个
])
db.MyCollection.aggregate([
{$group:{_id:'$salary', animate:{$push:'$age'}}} // $push分布
])
//$match == find find不能使用管道传递
db.MyCollection.aggregate([
//年龄20的人有哪些 与find效果相同
{$match:{'age':20}}
])
db.MyCollection.aggregate([
//求年龄大于15 的男女平均年龄
{$match:{'age':{$gt:15}}},
{$group:{_id:'$salary',avgage:{$avg:'$age'}}}
])
//$project 投影
db.MyCollection.aggregate([
// $只显示年龄之和
{$match:{'age':{$gt:15}}},
{$group:{_id:'$salary', maxage:{$max:'$age'}, minage:{$min:'$age'}}},
{$project:{minage:1}}
])
//$sort 投影
db.MyCollection.aggregate([
{$sort:{'age':-1}}// $年龄降序
])
//skip limit
db.MyCollection.aggregate([
{$skip:2},
{$limit:3}, //3,4,5
])
db.MyCollection.aggregate([
{$limit:3},
{$skip:2}, //3
])
//unwind 拆分
db.MyCollection.aggregate([
{$group:{_id:'$salary',allname:{$push:'$name'}}},//男女分组及分组后的名字
{$unwind:"$allname"} //拆分
])
//混用
db.MyCollection.aggregate([
{$match:{'age':{$gt:15}}},
{$group:{_id:'$salary', maxage:{$max:'$age'}, minage:{$min:'$age'}}},
{$project:{minage:1}},
{$sort:{'minage':-1}}
])
三、MongoDB索引查询
for(var i=0;i<=500000;i++){
db.data.insert({
_id:i,
user:'user'+i,
age:i
})
}
db.data.find({_id:250000}).explain('executionStats') //速度最快 1ms
db.data.find({user:'user250000'}).explain('executionStats')//速度最快 300ms
db.data.find({age:250000}).explain('executionStats')//速度最快 200ms
//开发中设置内容的key为id,提高查询速度
db.data.ensureIndex({user:1})
db.data.find({user:'user250000'}).explain('executionStats') //2ms
db.data.ensureIndex({age:1}) //2ms
db.data.getIndexes() //查看索引
db.data.dropIndex('age_1')//删除索引
四、备份与恢复
命令行运行
//备份
mongodump -h 127.0.0.1:27017 -d local -o C:\Users\Administrator\Desktop\beifen
//恢复
mongorestore -h 127.0.0.1:27017 -d beifen --dir C:\Users\Administrator\Desktop\beifen\local
//导出文件
mongoexport -h 127.0.0.1:27017 -d beifen -c MyCollection -o data.json // c Administrator
mongoexport -h 127.0.0.1:27017 -d beifen -c MyCollection -o data.csv --type csv -f id,user,age,salary
//导入文件
mongoimport -h 127.0.0.1:27017 -d beifen -c stu --file data.json