mongodb没有数据库缓存,直接写入硬盘
数据库能存储的类型:
1.object ID
> db.stu.find()
{ "_id" : ObjectId("5e819e9f75d26b8add679fe8"), "a" : 1 }
2.string
3.Array
4.Boolean
5.object
6.timestap
7.date
8.double
9.integer
> db.stu.find()
{ "_id" : ObjectId("5e819e9f75d26b8add679fe8"), "a" : 1 }
2.string
3.Array
4.Boolean
5.object
6.timestap
7.date
8.double
9.integer
#文档内容操作
#1.增
db.stu.insert({name:"张三",age:13,gender:true})
db.stu.insert({name:"李四",age:24,gender:true})
db.stu.insert({name:"李四",age:24,gender:true})
dict_data={
"_id":1,
name:"王五",
age:26,
gender:true
}
db.stu.insert(dict_data)
"_id":1,
name:"王五",
age:26,
gender:true
}
db.stu.insert(dict_data)
#2.删 stu是集合的名字
#删除符合条件的所有记录
db.stu.remove({name:"张三"})
#只删一条
db.stu.remove({gender:true},{justOne:true})
#删所有记录:
db.stu.remove({})
db.stu.remove({name:"张三"})
#只删一条
db.stu.remove({gender:true},{justOne:true})
#删所有记录:
db.stu.remove({})
#3.改 db.集合名字.update(查询条件,{$set:修改内容})
db.stu.insert({"_id":1,name:"张三",age:13,gender:true})
db.stu.insert({"_id":2,name:"李四",age:24,gender:true})
db.stu.insert({"_id":3,name:"王五",age:14,gender:true})
db.stu.insert({"_id":4,name:"小红",age:35,gender:false})
db.stu.insert({"_id":5,name:"小兰",age:26,gender:false})
db.stu.insert({"_id":6,name:"小飞",age:39,gender:true})
db.stu.insert({"_id":7,name:"小二",age:29,gender:false})
db.stu.insert({"_id":2,name:"李四",age:24,gender:true})
db.stu.insert({"_id":3,name:"王五",age:14,gender:true})
db.stu.insert({"_id":4,name:"小红",age:35,gender:false})
db.stu.insert({"_id":5,name:"小兰",age:26,gender:false})
db.stu.insert({"_id":6,name:"小飞",age:39,gender:true})
db.stu.insert({"_id":7,name:"小二",age:29,gender:false})
修改李四的名字为小时 set:设置
db.stu.update({_id:2},{$set:{name:"小时"}})
批量修改:修改所有男生的年龄为33
db.stu.update({gender:true},{$set:{age:33},{multi:true})
删除一条记录的某个属性:置空就可以
db.stu.update({_id:1},{$unset:{gender:""}})
db.stu.update({_id:2},{$set:{name:"小时"}})
批量修改:修改所有男生的年龄为33
db.stu.update({gender:true},{$set:{age:33},{multi:true})
删除一条记录的某个属性:置空就可以
db.stu.update({_id:1},{$unset:{gender:""}})
#4.基本查询
#4.1:db.集合名字.find({条件})
db.stu.find({gender:true})
db.stu.findOne({gender:true})
#4.2 比较运算
$lt less than | $lte less than equal
$gt greater than | $gte greater than equal
$ne not equal
db.stu.find({age:{$gt:18}})
db.stu.find({gender:true})
db.stu.findOne({gender:true})
#4.2 比较运算
$lt less than | $lte less than equal
$gt greater than | $gte greater than equal
$ne not equal
db.stu.find({age:{$gt:18}})
#4.3 逻辑运算符
$and $or find(默认多条件就是且的关系)
年龄大于28的男性: db.stu.find({age:{$gt:28},gender:true})
db.stu.find({$and:[{age:{$gt:28}},{gender:true}]})
女生或者是年龄小于30的男性:db.stu.find({$or:[{age:{$lt:30}},{gender:false}]})
#4.4 范围运算符
$in $nin 不能取一个区间内的所有
db.stu.find({age:{$in:[24,26]}})
$and $or find(默认多条件就是且的关系)
年龄大于28的男性: db.stu.find({age:{$gt:28},gender:true})
db.stu.find({$and:[{age:{$gt:28}},{gender:true}]})
女生或者是年龄小于30的男性:db.stu.find({$or:[{age:{$lt:30}},{gender:false}]})
#4.4 范围运算符
$in $nin 不能取一个区间内的所有
db.stu.find({age:{$in:[24,26]}})
#4.5 正则表达式
$regex
db.stu.find({name:{$regex:'小.'}})))
db.stu.find({name:/李/}) #名字以李开头的数据
db.stu.insert({"_id":8,name:"A",age:29,gender:false})
忽略大小写$options:i /。。。/i
$regex
db.stu.find({name:{$regex:'小.'}})))
db.stu.find({name:/李/}) #名字以李开头的数据
db.stu.insert({"_id":8,name:"A",age:29,gender:false})
忽略大小写$options:i /。。。/i
#4.6 定义函数
$where this表明当前这个集合stu里的
db.stu.find({
$where:function () {
return this.age>20
}
})
$where this表明当前这个集合stu里的
db.stu.find({
$where:function () {
return this.age>20
}
})
#5.查询结果显示
limit(4):看前四个
skip(2):跳过两个
混合使用 没有顺序,skip总是优先的
skip(2):跳过两个
混合使用 没有顺序,skip总是优先的
投影:
只显示name和age属性:db.stu.find({},{name:1,age:1})
统计男生的个数:
> db.stu.find({gender:true}).count()
4
> db.stu.count({gender:true})
4
排序:
按年龄升序:db.stu.find().sort({age:1})
按年龄升序,且年龄相同的按id降序:db.stu.find().sort({age:1,_id:-1})
去重:
db.stu.insert({"_id":9,name:"王五",age:26,gender:true})
db.stu.insert({"_id":10,name:"小红",age:29,gender:false})
去掉名字重复的:
> db.stu.distinct('name',{})
{管道1},
{管道2}
])
//$group 分组 男女分组性别分组
db.stu.aggregate([{$group:{ _id:'$gender'}}])
//表达式:$sum $avg $first $last $max $min $push:把所有的数据放在一起
统计男生的个数:
> db.stu.find({gender:true}).count()
4
> db.stu.count({gender:true})
4
排序:
按年龄升序:db.stu.find().sort({age:1})
按年龄升序,且年龄相同的按id降序:db.stu.find().sort({age:1,_id:-1})
去重:
db.stu.insert({"_id":9,name:"王五",age:26,gender:true})
db.stu.insert({"_id":10,name:"小红",age:29,gender:false})
去掉名字重复的:
> db.stu.distinct('name',{})
[ "张三", "李四", "小红", "小兰", "小飞", "小二", "A", "王五" ]
#6.复合查询 aggregate
db.stu.aggregate([{管道1},
{管道2}
])
//$group 分组 男女分组性别分组
db.stu.aggregate([{$group:{ _id:'$gender'}}])
//表达式:$sum $avg $first $last $max $min $push:把所有的数据放在一起
//性别分组,求年龄之和
> db.stu.aggregate([{$group:{ _id:'$gender',sumage:{$sum:'$age'}}}])
{ "_id" : false, "sumage" : 148 }
{ "_id" : true, "sumage" : 115 }
> db.stu.aggregate([{$group:{ _id:'$gender',sumage:{$sum:'$age'}}}])
{ "_id" : false, "sumage" : 148 }
{ "_id" : true, "sumage" : 115 }
//性别分组,求年龄的平均值
> db.stu.aggregate([{$group:{ _id:'$gender',sumage:{$avg:'$age'}}}])
{ "_id" : false, "sumage" : 29.6 }
{ "_id" : true, "sumage" : 23 }
> db.stu.aggregate([{$group:{ _id:'$gender',sumage:{$avg:'$age'}}}])
{ "_id" : false, "sumage" : 29.6 }
{ "_id" : true, "sumage" : 23 }
//性别分组,求年龄的最大值
> db.stu.aggregate([{$group:{ _id:'$gender',maxage:{$max:'$age'}}}])
{ "_id" : false, "maxage" : 35 }
{ "_id" : true, "maxage" : 39 }
//性别分组,求每组的每个人的年龄
> db.stu.aggregate([{$group:{ _id:'$gender',age:{$push:'$age'}}}])
{ "_id" : false, "age" : [ 35, 26, 29, 29, 29 ] }
{ "_id" : true, "age" : [ 13, 24, 39, 13, 26 ] }
> db.stu.aggregate([{$group:{ _id:'$gender',maxage:{$max:'$age'}}}])
{ "_id" : false, "maxage" : 35 }
{ "_id" : true, "maxage" : 39 }
//性别分组,求每组的每个人的年龄
> db.stu.aggregate([{$group:{ _id:'$gender',age:{$push:'$age'}}}])
{ "_id" : false, "age" : [ 35, 26, 29, 29, 29 ] }
{ "_id" : true, "age" : [ 13, 24, 39, 13, 26 ] }
//$match ==find 区别在于find不能用于管道传递
年龄大于20的人
1.db.stu.find({'age':{$gt:28}})
2.db.stu.aggregate([
... {$match:{age:{$gt:28}}}
... ])
find就不能求年龄大于20的男女各自的平均年龄
db.stu.aggregate([
{$match:{age:{$gt:28}}},
{$group:{_id:"$gender",avgage:{$avg:"$age"}}}
])
年龄大于20的人
1.db.stu.find({'age':{$gt:28}})
2.db.stu.aggregate([
... {$match:{age:{$gt:28}}}
... ])
find就不能求年龄大于20的男女各自的平均年龄
db.stu.aggregate([
{$match:{age:{$gt:28}}},
{$group:{_id:"$gender",avgage:{$avg:"$age"}}}
])
//$project ==投影 显示的字段 设为1或true
求年龄小于30,按性别分组,求年龄之和,求年龄平均值;只想看之和
db.stu.aggregate([
{$match:{age:{$lt:30}}},
{$group:{_id:'$gender',sumage:{$sum:'$age'},avgage:{$avg:'$age'}}},
{$project:{sumage:true}}
])
求年龄小于30,按性别分组,求年龄之和,求年龄平均值;只想看之和
db.stu.aggregate([
{$match:{age:{$lt:30}}},
{$group:{_id:'$gender',sumage:{$sum:'$age'},avgage:{$avg:'$age'}}},
{$project:{sumage:true}}
])
//$sort 排序:
db.stu.aggregate([
{$sort:{age:-1}}
])
db.stu.aggregate([
{$sort:{age:-1}}
])
//$skip $limit 对顺序敏感
//$unwind :拆分列表 $push:把所有的数据全部列出来
按性别分组,把所有的名字列出来
> db.stu.aggregate([
{$group:{_id:'$gender',allname:{$push:'$name'}}}
])
{ "_id" : false, "allname" : [ "小红", "小兰", "小二", "A", "小红" ] }
{ "_id" : true, "allname" : [ "张三", "李四", "小飞", "王五", "王五" ] }
> db.stu.aggregate([
... {$group:{_id:'$gender',allname:{$push:'$name'}}},
... {$unwind:'$allname'}
... ])
{ "_id" : false, "allname" : "小红" }
{ "_id" : false, "allname" : "小兰" }
{ "_id" : false, "allname" : "小二" }
{ "_id" : false, "allname" : "A" }
{ "_id" : false, "allname" : "小红" }
{ "_id" : true, "allname" : "张三" }
{ "_id" : true, "allname" : "李四" }
{ "_id" : true, "allname" : "小飞" }
{ "_id" : true, "allname" : "王五" }
{ "_id" : true, "allname" : "王五" }
db.stu.aggregate([
{$match:{age:{$lt:60}}},
{$group:{_id:'$gender',animal:{$push:'$like'}}},
{$unwind:'$animal'}
])
按性别分组,把所有的名字列出来
> db.stu.aggregate([
{$group:{_id:'$gender',allname:{$push:'$name'}}}
])
{ "_id" : false, "allname" : [ "小红", "小兰", "小二", "A", "小红" ] }
{ "_id" : true, "allname" : [ "张三", "李四", "小飞", "王五", "王五" ] }
> db.stu.aggregate([
... {$group:{_id:'$gender',allname:{$push:'$name'}}},
... {$unwind:'$allname'}
... ])
{ "_id" : false, "allname" : "小红" }
{ "_id" : false, "allname" : "小兰" }
{ "_id" : false, "allname" : "小二" }
{ "_id" : false, "allname" : "A" }
{ "_id" : false, "allname" : "小红" }
{ "_id" : true, "allname" : "张三" }
{ "_id" : true, "allname" : "李四" }
{ "_id" : true, "allname" : "小飞" }
{ "_id" : true, "allname" : "王五" }
{ "_id" : true, "allname" : "王五" }
db.stu.aggregate([
{$match:{age:{$lt:60}}},
{$group:{_id:'$gender',animal:{$push:'$like'}}},
{$unwind:'$animal'}
])