# 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()