mongodb

# mac安装tesseract
brew install tesseract-lang

###1-mongodb的简单使用

mongodb默认端口:27017
mongodb配置文件路径:/etc/mongod.conf

# 先启动mongodb服务端:
	sudo service mongod start
  或者
  sudo mongod
# 再进入mongodb客户度:
	mongo

# 查看当前数据库: db
# 查看所有数据库: show dbs
# 切换数据库: use 数据库名
# 删除当前数据库: db.dropDatabase()
# 查看集合:show collections    【show tables】
# 删除集合:db.集合名称.drop()

# 1.use 数据库名
# 2.向集合中插入一条数据:db.集合名称.insert({"name":"curry"}
# 3.查询集合中的数据: db.集合名称.find()

# 强调:
	1.在mongodb中数据库和集合不需要提前创建
  2.当我们第一次向不存在的集合中添加数据的时候,此时数据库和集合会`自动的创建`。
[{"name": "james", "number":"23"},{"name": "T-mac", "number": 1}, {"name": "林有有", age:18}]

db.stu.insertMany([{"name": "james", "number":"23"},{"name": "T-mac", "number": "1"}, {"name": "林有有", "age":"18"}])


db.stu.insertMany([{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true },
{"name" : "黄蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false },
{"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false },
{"name" : "黄药师", "hometown" : "桃花岛", "age" : 40, "gender" : true },
{"name" : "段誉", "hometown" : "大理", "age" : 16, "gender" : true },
{"name" : "段王爷", "hometown" : "大理", "age" : 45, "gender" : true },
{"name" : "洪七公", "hometown" : "桃花岛", "age" : 50, "gender" : true }])


# 局部更新多条记录
db.stu.update({"hometown":"大理"},{$set:{"hometown":"云南-大理"}}, {multi: true})
# 删除
db.stu.remove({"hometown":"桃花岛"}, {justOne: true})

# 统计家乡数量
db.stu.aggregate([{
  $group: {
    	_id: "$hometown",
    	hometown_count:{$sum: 1}
  }
}])

# 统计平均年龄
db.stu.aggregate([{
  $group:{
    _id: null,
    age_avg:{$avg: "$age"}
  }
}])

# 家乡分组的平均年龄
db.stu.aggregate([{
  $group: {
    	_id: "$hometown",
    	hometown_count:{$sum: 1}
  }
}, {
  $group: {
    id: null,
    age_avg:{$avg: "$age"}
  }
}])


# 以hometown分组,统计每一组中的名字以列表的形式展示
db.stu.aggregate([{
  $group:{
    _id: "$hometown",
    name_list: {$push: "$name"}
  }
}])

# 将名字对应的`整条文档记录`添加到列表中
db.stu.aggregate([{
  $group:{
    _id: "$hometown",
    name_list: {$push: "$$ROOT"}
  }
}])


# 查询年龄大于20的数据
db.stu.aggregate([{
  $match: {
    age:{$gt: 20}
  }
}])

# 查询年龄大于20, 以hometown分组, 统计数量
db.stu.aggregate([{
  $match: {
    age:{$gt: 20}
  }
}, {
  $group: {
    _id: "$hometown",
    hometown_count:{$sum: 1}
  }
}])

# 控制字段显示:id字段隐藏 显示name和age字段
db.stu.aggregate([{
  $project: {_id:0, name:1, age:1}
}])

# 通过性别分组,统计人数,但最后只展示统计人数
db.stu.aggregate([{
  $group:{
    _id:"$gender",
    gender_count:{$sum: 1}
  }
}, {
  $project: {_id:0, gender_count:1}
}])

# 查询男性英雄信息,按照年龄降序排序
db.stu.aggregate([{
  $match: {
		gender: true
  }
}, {
  $sort: {age: -1}
}])


# 前两条数据
db.stu.aggregate({
  $limit:2
})

# 统计男女生人数,按照人数降序,返回第二条数据 $skip:1 $limit:1
db.stu.aggregate([{
  $group:{
    _id: "$gender",
    gender_count: {$sum:1}
  }
}, {$sort: {gender_count: -1} }, {$skip:1}, {$limit:1}])



###2.mongodb中常见的数据类型

# Object ID: 
	文档ID/数据的ID,数据的主键,mongodb默认使用_id作为主键

# 一共是24位的字符串组成:8位为当前时间戳
	接下来6位的机器ID
	接下来的4位中MongoDB的服务进程id
	最后6位是简单的增量值

###3.Mongodb的的增删改查

# 增
	db.集合名称.insert({})
  db.集合名称.insertMany([{},..])

# 删
	db.集合名称.remove({删除条件},{justOne:true}) # 删除满足条件的第一条数据
  db.集合名称.remove({删除条件})  # 删除满足条件所有数据
	db.集合名称.remove({}) # 删除所有集合中的数据
	
# 改
	db.集合名称.update({更新条件},{更新数据},{multi:bool})
  multi:true 批量更新
  multi:true 只更新满足条件的第一条数据
  默认情况:覆盖式更新
  $set:{更新的键值对} : 局部更新
    
# 查
	db.集合名称.find()
  db.集合名称.find({查询条件})

###4.Mongodb的高级查询

# db.集合名称.find({查询条件})
# 查询条件可以是一下行为:

# 比较运算符:
	== $gt $lt
# 逻辑运算符:
	$and:[{条件1}, {条件2}] or {{条件1} ,{条件2}}    $or:[{条件1}, {条件2}]
# 范围运算符:
	{属性: {$in:[]}}
# 正则表达式: 
	{属性: {$regex:"正则"}}
# 查询数量限制:
	skip(n)
  limit(n)
# 查询投影: 
	db.集合.find({},{_id:0代表不显示,其他字段:1代表显示}) 
  类似于sql指定字段查询: select name age from table_name  
# 排序: 
	db.集合.find().sort({字段1: -1, 字段2: 1})
  其中1代表升序, -1代表降序
# 统计个数: 
	db.集合.find({条件}).count()  
  db.集合.count({条件})
  有find,查询条件写find里面,没有find,查询条件写count里面
db.集合名称.aggregate([
   {管道名 : {表达式}},
   {管道名 : {表达式}},
   {管道名 : {表达式}},
   ...
])

# ----------group管道------------
# 统计家乡数量
db.stu.aggregate([
  {$group: {
     _id: "$hometown",
     "hometown_num": {$sum: 1}
  }}
])

# 统计平均年龄
db.stu.aggregate({
  $group: {
    _id: null,
    'age_avg': {$avg: "$age"}
  }
})

# 家乡分组的平均年龄
db.stu.aggregate({
  $group: {
    _id: "$hometown",
    'age_avg': {$avg: "$age"}
  }
})

# 以hometown分组,统计每一组中的名字以列表的形式展示
db.stu.aggregate([
  {
    $group: {
      _id: "$hometown",
      "name_list": {$push: "$name"}
    }
  }
])


# 以hometown分组,统计每一组,将`整个文档`以列表的形式展示
db.stu.aggregate([
  {
    $group: {
      _id: "$hometown",
      "name_list": {$push: "$$ROOT"}
    }
  }
])


# ----------match管道------------
# 查询年龄大于20的数据
db.stu.find({age: {$gt: 20}})

db.stu.aggregate([
  {
    $match: {
      "age": {$gt: 20}
    }
  }
])

# 查询年龄大于20, 以hometown分组, 统计数量
# 管道1: $match
# 管道2: $group
# 注意: age比较字段必须存在
db.stu.aggregate([
  {
    $match: {
      "age": {$gt:20}
    }
  },
  {
    $group: {
      _id: "$hometown",
      "counter": {$sum:1}
    }
  }
])

# ----------project管道------------
# 查询英雄的年龄和姓名,仅输出年龄和姓名
db.stu.find({}, {_id:0, name:1, age:1})

db.stu.aggregate({
  $project: {name:1, age:1, _id:0}
})

# 通过性别分组,统计人数,但最后只展示统计人数
# 管道1:$group
# 管道2:$project
db.stu.aggregate([
  {
    $group: {
      _id: "$gender",
      "gender_count": {$sum: 1}
    }
  },
  {
    $project: {gender_count: 1, _id:0}
  }
])

# -----------sort管道---------------
# 查询男性英雄信息,按照年龄降序排序
db.stu.find({gender: true}).sort({age:-1})

# 管道1:$match
# 管道2:$sort
db.stu.aggregate([
  {
    $match: {gender:true}
  },
  {
    $sort: {age:-1}
  }
])

# -----------skip limit 管道---------------
db.stu.find().skip(2).limit(2)

db.stu.aggregate([
  {
    $skip: 2
  },
  {
    $limit:2
  }
])

# 统计男女生人数,按照人数降序,返回第二条数据
# 管道1:$group
# 管道2:$sort
# 管道3:$skip
# 管道4:$limit

db.stu.aggregate([
  {
    $group:{
      _id: "$gender",
      "gender_count": {$sum:1}
    }
  },
  {
    $sort: {gender_count:-1}
  },
	{
    $skip:1
  },
  {
    $limit:1
  }
])

###5.mongodb的聚合: $group管道

# $group管道,先根据字段分组,再做聚合统计

# 聚合语法:
  db.集合名.aggregate([
    {管道名: {表达式}},
    {管道名: {表达式}},
    {管道名: {表达式}},
  ])
  
# 注意:管道名和字段名前面一定要加$
# _id:"$字段" 表示分组

# 统计家乡数量
db.stu.aggregate([
  {
    $group: {
      _id: "$hometown",
      "家乡数量统计":{$sum: 1},
    }
  }  
])
# 设置分组字段: _id: "$hometown"
# 编写统计表达式: "家乡数量统计":{$sum: 1},
# $sum 统计总数表达式

# 统计平均年龄
db.stu.aggregate([{
  $group: {
    _id: null,
    "平均年龄": {$avg: "$age"}
  }
}])

# 家乡分组的平均年龄
db.stu.aggregate([{
  $group: {
    _id: "$hometown",
    "平均年龄": {$avg: "$age"}
  }
}])


# $push 将分组后的数据装入列表
# 使用$$ROOT可以将整个文档放入数组中

db.stu.aggregate([{
  $group: {
    _id: "$hometown",
    "name_list":{$push: "$name"}
  }
}])

###6.mongodb的聚合: $match管道

# $match管道根据条件过滤查询

# 查询年龄大于20的数据
db.stu.aggregate({
  $match: {
    age:{$gt:20}
  }
})

# 查询年龄大于20的男女学生的人数
db.stu.aggregate([
  $match: {
    age:{$gt:20}
  }},
  $group: {
    _id: "$gender",
    "gender_count": {$sum: 1}
  } 
])

###7.mongodb的聚合: $project管道

# $project管道类似于投影,可以控制字段不显示

# 查询学生的年龄、姓名,仅输出年龄姓名
db.stu.aggregate([
  {
    $project:{
      _id:0,
      age:1,
      name:1
    }
  }
])

# 通过性别分组,统计人数,但最后只展示统计人数
db.stu.aggregate([
  {
    $group:{
      _id: "$gender",
      counter:{$sum:1}
    }
  },
  {
    $project:{_id:0, counter:1}
  }
])

###8.mongodb的聚合: $sort 管道

# $sort 对数据进行排序操作

# 查询男性英雄信息,按照年龄降序排序
db.stu.aggregate([
  {$match: {gender:true}},
  {$sort: {age:-1}}
])

###9.mongodb的聚合:$skip$limit管道

# $skip  跳过指定的文档数,并返回剩下的文档数
# $limit 限制返回数据的条数
# 查询前两条英雄信息
db.stu.aggregate({
  $limit:2
})

# 查询从第三条开始的英雄信息
db.stu.aggregate({
  $skip:3
})

# 统计男女生人数,按照人数降序,只返回第二条数据
db.stu.aggregate([
  {$group:{
    _id: "$gender",
    gender_count:{$sum:1}
  }},
  {$sort: {gender_count: -1}},
  {$skip: 1},
  {$limit:1}
])

###10.mongodb的索引操作

# 建立索引提升查询速度, 但是会降低增删改的速度

# 建立索引语法:
	db.集合名.ensureIndex({字段名:-1 or 1}) 
  其中 1代表升序,-1代表降序
  
# 建立唯一索引语法:
	db.集合名称.ensureIndex({字段名:1}, {"unique": true})

# 建立复合索引: 同时给字段1字段2建立复合索引
	db.集合名称.ensureIndex({字段1: 1, 字段2: -1})
  
# 查询索引:
	db.集合名称.getIndexes()
  
# 删除索引:
	db.集合名称.dropIndex({字段名:1})

# 使用场景:
	数据量巨大并且数据库的读出操作非常频繁的时候才需要创建索引
  如果写入操作非常频繁,创建索引会影响写入速度

###11.mongodb和python的交互操作

# 1.链接mongodb数据库
client = MongoClient(host, port)

# 2.创建集合对象
# 方法1:支持[]语法
# col = client["数据库名"]["集合名"]
# 方法2:支持.语法
col = client.数据库名.集合名

# 3.插入数据
col.insert_one({"msg": "能成功吗?那必须滴"})
col.insert_many()
# 3.1 删
col.delete_one()
col.delete_many()
# 3.2 改
col.update()
col.update_many()
# 3.3 查
col.find()
col.find_one()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值