mongodb使用二

 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
#文档内容操作
#1.增
db.stu.insert({name:"张三",age:13,gender:true})
db.stu.insert({name:"李四",age:24,gender:true})
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({})

#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})
修改李四的名字为小时  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:""}})

 #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}})
#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]}})
#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

 

#4.6 定义函数
$where   this表明当前这个集合stu里的 
db.stu.find({
 $where:function () {
  return this.age>20
 }
})
#5.查询结果显示
limit(4):看前四个 
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',{})

  [ "张三", "李四", "小红", "小兰", "小飞", "小二", "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:{$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 ] }
//$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"}}}
  ])
//$project  ==投影  显示的字段  设为1或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}}
  ])
//$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'}
 ])
posted @ 2020-04-02 16:10  wind_y  阅读(209)  评论(0编辑  收藏  举报