-
MongoDB中的集合与文档相当于MySQL中的表与行
-
数据库操作
- 查看当前数据库名字 db
- 所有物理上存在的数据库 show dbs
- 创建/切换数据库 use dbname
- 删除数据库 db.dropDatabase()
-
集合
-
创建集合 db.createCollection(name,options) 集合名称,配置(文档)
-
options => 固定集合大小 {capped:true,size:10} capped为true必须指定size大小
自动在_id字段创建索引{autoIndexld:true} 默认为false
设置文档最大数量 {max:10000} 可跟数组 {size:[S,M,L]}
-
-
查看当前集合 show collections
-
删除集合 db.集合名.drop()
-
-
数据操作
-
增
- db.集合名.insert(document) document字典(json)格式
- db.stu.insert({_id:9999,name:“lqs”})
-
删
- db.集合名.remove({}) # 全部删除
- db.集合名.remone({条件},{参数})
- db.stu.remove({gender:0,{justOne:true}}) # justOne为true/1只删除一条,默认false全删
-
改
- db.集合名.update({条件}, {更新操作符},{multi:true}) # multi(可选)为true把满足条件全部更新,默认为false
- 指定属性更新 db.stu.update({},{$set:{gender:0}})
-
保存
- db.集合名.save(document) # 文档_id不存在则添加,存在则修改
-
查 db.集合名.find()
-
// limit() 读取指定数量的文档 db.集合名.find().limit(num) // num 要获取的文档数 // skip() 跳过在指定数量的文档 可搭配limit,不分先后顺序 db.集合名.find().skip(num) // 投影 返回指定字段的结果 db.集合名.find({},name:1,age:1) # 要显示的字段设为1 // sort() 排序 字段:1 为升序 -1 降序 dbb.集合名.find().sort({gender:-1,age:1}) # 先根据性别降序,在根据年龄升序 // count() 统计 db.集合名.find({条件}).count() => db.集合名.count({条件}) //distinct() 消除重复 db.集合名.distinct('去重字段',{条件}) db.stu.distinct("gender",{age:{$gt:18}}) # 年龄大于18的性别(去重)
-
-
-
数据高级操作
-
聚合 aggregate
-
db.集合名.aggregate([{管道:{表达式}}])
-
接收数组 数组中添加多个条件
-
/管道 上一次的结果用作下一次的输入
db.集合名.aggregate([{$match:{age:{$gt:20}}},$group:{_id:'$gender',counter:{$sum:1}}]) # 把查出年龄大于20的数据作为group中的输入数据,按性别分组,计算总和
-
表达式
- s u m , sum, sum,avg, m i n , min, min,max 计算和/平/最小/最大 与MySQL相同
- $push 将结果插入到数组中
- $first, $last 获取最前/后的数据
-
管道
- $group 分组
- $match 过滤数据
- $project 修改文档字段
- $sort , $limit, $skip 排序/指定数量/跳过
- $unwind 将数组类型的字段拆分 但默认会忽略空数组
- { u n w i n d : " unwind:" unwind:"size"} 根据size字段的不同进行分组
- {KaTeX parse error: Expected '}', got 'EOF' at end of input: unwind:{path:"size",preserveNullAndEmptyArrays:true}} 处理空数组/非数组/无字段/null的情况
-
-
索引 createIndex()
-
建立索引 1是升序 -1降序
- db.集合名.createIndex({ 字段 : 1<-1> })
- 唯一索引 则 该字段不能重复
- db.集合名.createIndex({ 字段 : -1 }, { ‘unique’ : true})
- 联合索引
- db.集合名.createIndex({ 字段1 : 1 , 字段2 : -1})
-
查看索引
db.集合名.getIndexes()
-
删除索引
db.集合名.dropIndex( ’ 索引名称 ’ ) # 删除指定索引
db.集合名.dropIndexes() # 删除所有索引
//循环创建多条数据 for(i=0;i<100000;i++){db.t1.insert({name:"test"+i,age:i})} //使用explain()进行查询性能分析 db.t1.find({name:"test10000"}).explain("executionStats") //建立索引 db.ti.ensureIndex(age:-1)
-
-
安全
-
超级管理员
//创建数据库 use admin //创建超级用户 db.createuser({ user:'admin', pwd:'123', roles:[{role:'root',db:'admin'}] //指定用户角色,管理的数据库 }) //修改配置文件 //重启服务 //账号登录 mongo -u 'admin' -p '123' --authenticationDatabase 'admin'
-
普通名用户
//先用超级管理员登陆,再进行用户创建 //创建普通用户 roles:[{role:'readWrite',db:'test1'}] //修改用户数据 db.updateUser('test1',{pwd:'456'}) 可修改pwd,roles属性
-
-
复制(副本集) ==>集群
- 特点
- N个节点的集群
- 任何节点都可做主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复
- 关闭主服务器后再重启,会发现从节点变为主节点,新启动的会变为从节点
- 特点
-
备份/恢复
# 备份 -h 指定ip/端口 -d 指定数据库名 -o 备份数据存放位置 mongodump -h 192.168.123.123 -d py3 -o ~/Desktop # 恢复 --dir备份数据所在位置 mongostore -h 192.168.13.123 -d py3 --dir ~/desktop
-
Python交互
# 导入pymongo import pymongo # 创建连接对象 ip/端口 client = pymongo.MongoClient('localhost',27017) # 指定连接的数据库 db = client.py3 # 指定集合 coll=db.t1 # 遍历数据 for coll1 in coll.find(): print(coll1) # 总数 print(coll.count())
-
MongoDb使用笔记
最新推荐文章于 2023-03-06 23:30:58 发布