芒果数据库
MongoDB数据库常⽤语句
1. 数据库级常⽤操作
u databaName # 使⽤库 / 创建库,不会⽴即创建,当需要等到插⼊数据时数据库才会创建show dbs # 查看系统中的数据库
db.dropDataba() # 删除数据库
2. 集合常⽤操作
show collections # 查看库中的集合
show tables
db.class0.inrtOne({name:"Levi",age:20,x:'m'}) # 插⼊⼀条⽂档
带植物的诗句db.class0.inrtMany([{name:"John"},{name:"Lenzer"}]) # 插⼊多条⽂档
3. ⽂档常⽤操作
find(query,field) # query 查找条件,相当于where⼦句
# field 查找的域, 0不显⽰,1显⽰
db.class0.findOne({x:'w'},{_id:0,name:1}) # 查询满⾜条件的第⼀条⽂档
⽤于query的特殊操作符:
⽐较操作符:
$eq 等于 == ; $lt ⼩于 < ; $lte ⼩于等于 <=; $in 包含
$ne 不等于 !=; $gt ⼤于 > ; $gte ⼤于等于 >=; $nin 不包含
逻辑操作符:
$and 逻辑与; $or 逻辑或; $not 逻辑⾮; $nor
Array数组相关:
$all e.g. db.class.find({score:{$all:[49,67]}},{_id:0}) 查找同时包含49 67的⽂档
$size e.g. db.class1.find({score:{$size:2}},{_id:0}) 查找score中包含两个元素的⽂档
$slice e.g. db.class1.find({},{_id:0,score:{$slice:2}}) 显⽰数组前两项
其他常⽤查找操作符:
$exists e.g. db.class1.find({x:{$exists:fal}},{_id:0}) 查找不存在x域的⽂档,true:存在,fal:不存在$mod e.g. db.class1.find({age:{$mod:[2,1]}},{_id:0}) 找出年龄为单数的⽂档
提打挺松
声明书怎么写$type e.g. db.class1.find({name:{$type:2}},{_id:0}) 查找name域值类型为2的⽂档
查找结果的操作函数:
distinct(filed) db.class0.distinct('age') 获取某个域的值,去重
pretty() db.class0.find().pretty() 格式化显⽰查询结果
广播体操第八套完整版
limit(n) db.class0.find({},{_id:0}).limit(3) 显⽰查询结果前三条
skip(n) db.class0.find({},{_id:0}).skip(5) 跳过前5条⽂档,显⽰后⾯的查询结果
count() db.class0.find({x:'w'},{_id:0}).count() 统计性别为w的⽂档个数
sort({field: 1/-1}) db.class0.find({},{_id:0}).sort({age:-1}) 查找结果按照降序排序
remove(query,justOne) ve({x:{$exists:fal}}) 删除所有不存在x域的⽂档
justOne=true ve({x:'w'},true) 删除第⼀条性别为w的⽂档
ve({}) 删除class1中所有⽂档
update(query,update,uprt,multi) query 筛选条件⽤法同find
update 要修改成什么内容通常配合修改操作符(修改器)使⽤
uprt 布尔值,默认是fal 如果query没有筛选到⽂档则不做任何操作
如果设置为true 则如果query没有筛选到匹配⽂档则根据query和update内容插⼊新的⽂档
中学数学教案
multi 布尔值默认fal 表⽰如果有多条符合条件⽂档则只修改第⼀条
如果设置为true则表⽰修改所有符合条件⽂档
db.class0.update({name:'Tom'},{$t:{age:18}}) 将Tom的年龄修改为18
修改器:
$t e.g. db.class0.update({name:'Lily'},{$t:{age:17}}) Lily年龄修改为17
$unt e.g. db.class0.update({name:'Abby'},{$unt:{x:''}}) 删除Abby的x域,x后为空字符串$rename e.g. db.class0.update({},{$rename:{x:'gender'}},fal,true) 将x域名改为gender $
$inc e.g. db.class0.update({},{$inc:{age:1}},fal,true) 所有⼈年龄加1
$mul e.g. db.class0.update({},{$mul:{age:0.5}},fal,true) 所有⼈年龄乘以0.5
$min e.g. db.class0.update({name:'Levi'},{$min:{age:20}}) Levi age如果⼤于20则修改为20
$max e.g. db.class0.update({name:'Lenzer'},{$max:{age:19}}) 如果Lenzer age ⼩于19则改为19
数组修改器:
$push e.g. db.class1.update({name:'⼩红'},{$push:{score:91}}) 给⼩红 score数组中添加⼀项91
$pushAll e.g. db.class1.update({name:'⼩乔'},{$pushAll:{score:[94,10]}}) 给⼩乔 score数组中添加多项
$pull e.g. db.class1.update({name:'⼩红'},{$pull:{score:78}}) 从⼩红 score数组中删除⼀项78
$ db.class1.update({name:'⼩乔'},{$pullAll:{score:[92,10]}}) 从⼩乔 score数组中删除多项
$each e.g. db.class1.update({name:'⼩乔'},{$push:{score:{$each:[99,10]}}}) 分别插⼊99 10
$ db.class1.update({name:'⼩明'},{$push:{score:{$each:[67],$position:1}}}) 将67 插⼊到数组1号位置$sort e.g. db.class1.update({},{$push:{score:{$each:[],$sort:-1}}},fal,true) 将所有score域的数组降序排序$pop e.g. db.class1.update({name:'⼩明'},{$pop:{score:-1}}) 删除⼩明score中第⼀项,1:最后⼀项,-1:第⼀项$ db.class1.update({name:'⼩刚'},{$addToSet:{score:81}}) 如果数组中没有81 则添加81
时间数据类型
# mongo中存储时间⼤多为 ISODate
new Date() e.g. db.class2.inrt({book:'Python⼊门',date:new Date()}) ⾃动⽣成当前时间
ISODate() e.g. db.class2.inrt({book:'Python精通',date:ISODate()}) ⾃动⽣成当前时间
db.class2.inrt({book:'Python崩溃',date:ISODate("2018-07-01 11:15:56")} 指定时间
Date() e.g. db.class2.inrt({book:'Python疯狂',date:Date()}) 将系统时间转换为字符串
valueOf() e.g. db.class2.inrt({book:'Python涅槃',date:ISODate().valueOf()}) 获取当前标准时间时间戳
4.索引
sureIndex({name:1}) 根据name域创建索引(1:正序索引,-1:逆序索引)
预备的意思sureIndex({age:1},{name:'ageIndex'}) 对age域创建索引命名ageIndex
db.class0.dropIndex({name:1}) 删除索引,根据键值对
db.class0.dropIndex('ageIndex') 删除索引,根据索引名
索引类型:
sureIndex({name:1,age:-1},{name:'name_age'}) 复合索引
sureIndex({name:1},{unique:true}) 唯⼀索引
sureIndex({age:1},{spar:true}) 稀疏索引(间隙索引)只对有age域的⽂档创建索引
5.聚合操作
db.class0.aggregate({$group:{_id:'$gender',num:{$sum:'$age'}}}) # $group 分组聚合需要配合具体的分组统计选项 $sum : 求和 # $avg : 求平均数, $max 求最⼤值,$min 求最⼩值
db.class0.aggregate({$project:{_id:0,name:1,age:1}}) # $project 修改⽂档的显⽰效果
db.class0.aggregate({$match:{age:{$gt:18}}}) # $match 数据筛选过滤年龄⼤于18岁的数据⽂档
db.class0.aggregate({$limit:3}) # $limit 筛选前⼏条⽂档
db.class0.aggregate({$skip:3}) # $skip 跳过⼏条⽂档显⽰
db.class0.aggregate({$sort:{age:1}}) # 将数据排序
聚合管道: 将上⼀个聚合的操作结果给下⼀个聚合继续操作
db.class0.aggregate([{$match:{gender:'m'}},{$project:{_id:0}},{$sort:{age:1}}]) # match --> project --> sort
6.固定集合
mongodb中可以创建⼤⼩固定的集合,称之为固定集合
特点: 能够淘汰早期数据
插⼊和顺序查找速度更快
可以控制集合的空间⼤⼩
使⽤: 临时缓冲
⽇志处理
# size:表⽰指定集合的⼤⼩字节
# max:指定集合存放⽂档上限
7. pymongo
主机开不了机安装: sudo pip3 install pymongo
conn = pymongo.MongoClient('localhost',27017) # 1.创建数据库连接对象db = conn.stu # 2.⽣成数据库对象
myt = db.class0 # 3.⽣成集合对象
# 4. 集合操作(增删改查索引聚合)舌淡苔白
conn.clo() # 关闭数据库连接
增:inrt() inrt_many() inrt_one() save()
查:find() find_one()
改:update(query,update,uprt=Fal,multi=Fal) update_many() update_one()
删:remove(query,multi = True)
cursor = db.class0.find()
cursor.hasNext() # 查看是否有下⼀个结果
<() # 获取下⼀个结果
游标 cursor 属性: next() limit() skip() count() sort()
数据库的备份和恢复
备份 mongodump -h host -d dbname -o bak
恢复 mongorestore -h dbhost:port -d dbname path