MongoDB
一丶MongoDB的初识
# 1. MongoDB 是非关系数据库 , 文件存储类型.
# "引用不存在的 对象 , 创建这个对象"
# 2. 默认监听端口 27017
# 3. Windows 启动Mongdb 指定数据存储文件 --dbpath="d:/data/db"
# 4. MongoDB 存储数的数据类型是 JSON格式
二丶Mongodb的指令
# 1. 查看 数据库
show databases;
# 2. 切换使用的数据库
use databasename;
# 3. db 查看当前使用的数据库
# 4. show tables 查看当前数据库磁盘中的表
# 5. 新建数据库
use 不存在的数据库名. 即,在"内存"中创建该数据库
# 6. db.不存在的表名 即,在当前数据库创建一张表(内存)
三丶CRUD 基础 增删改查
### 新增
语法: db.tablename.insert({})
db.user.insert({name:"沙悟净",age:66.66,hobby:[1,2,3,4]})
### 查询
# find 查询 , {查询条件} 即 查询所有符合条件的数据
语法: db.table.find({单查询条件})
eg : db.table.find({name:'沙悟净'})
语法: db.table.find({多条件})
eg : db.table.find({name:'沙悟净',age:22})
# findOne({}) 查询符合条件的第一条数据,返回JSON数据
db.table.findOne({name:'沙悟净'})
# "$" 数据比较符
$lt 小于 $lte 小于等于
$gt 大于 $gte 大于等于
$eq 等于 $ne 不等于
### 修改 更新
# 全部基于 修改器 "$"关键字
$set $unset $inc (常用)
$push $pushAll $pull $pullAll 针对Array List 操作
# $set 强制的将某字段进行修改
db.user.update({age:22},{$set:{age:18}})
# $set 如果该字段不存在,即创建该字段并赋值
db.user.update({name:"沙悟净"},{$set:{ag22e:22}})
# $unset 删除字段
db.user.update({name:'沙悟净'},{$unset:{ag22e:22}})
# $inc 引用增加 , 先引用原有数据,在原有数据基础上增加
db.user.update({name:'沙悟净'},{$inc:{age:1}}) # 增加
db.user.update({name:'沙悟净'},{$inc:{age:-1}}) # 减去
# $push == append() 在array最末端添加一条数据
db.user.update({name:'沙悟净'},{$push:{hobby:"8"}})
# $pushAll == extends() 在array最末端添加多条数据
# $pull == remove() 遍历所有,删除10 所有这个值
db.user.update({name:'沙悟净'},{$pull:{hobby:10}})
# $pullAll 删除多条数据 删除所有符合条件的数据
db.user.update({name:'沙悟净'},{$pullAll:{hobby:10}})
# $pop ~=pop() 删除Array中的第一条或最后一条
db.user.update({name:'沙悟净'},{$pop:{hobby:-1}}) 删除第一个数据
db.user.update({name:'沙悟净'},{$pop:{hobby:1}}) 删除最后一个数据
### 删除
语法: db.tablename.remove({查询条件}) 删除符合条件的所有数据
eg: db.user.remove({age:22}) # 删除年龄为22 的数据
# 注意操作
db.user.remove({}) # 相当于清空数据库
四丶官方推荐语法 , `### 关键字
# 增 官方推荐写法 in 3.2:
db.user.insertOne({}) 增加一条数据
db.user.insertMany([{},{}]) 批量增加数据
# 修改 官方推荐的写法
db.user.updateOne({},{}) 修改符合条件的第一条数据
db.user.updateMany({},{}) 修改符合条件的所有数据
# 删除 官方推荐的写法
db.user.deleteOne({}) # 删除符合条件的第一条数据
db.user.deleteMany({}) # 删除所有符合条件的数据 危险! 如果条件为空则删除所有数据
#### "$" 是用来存储符合当前Array条件元素的下标索引
db.user.updateOne({name:"太白金星","stdent.name":"MPy"},{$set:{"stdent.$.name":"Anyway"}})
db.user.updateOne({name:"太白金星",hobby:"喝酒"},{$set:{"hobby.$":"飙车"}})
# 1. 当前 array ["抽烟","喝酒","剃头"]
# 2. 条件元素 {hobby:"喝酒"}
# 3. 当前array 第2个元素符合条件,它的索引是1
# 4. $的值就是1
###注意:
如果使用".索引"的方式来操作Array, 必须用引号包含 "字段.索引位"
五丶MongoDB的数据类型
ObjectID :Documents 自生成的 _id
String: 字符串,必须是utf-8
Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
Double:浮点数 (没有float类型,所有小数都是Double)
Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
Null:空数据类型 , 一个特殊的概念,None Null
Timestamp:时间戳
Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
六丶选取 跳过 排序
### 排序
db.user.find({}).sort({age:-1}) 倒序
db.user.find({}).sort({age:1}) 正序
### 跳过
db.user.find({}).skip(跳过条目) 跳过
### 选取
db.user.find({}).limit(300) 选取300条数据
如果数据条目小于300 则全部查询
大于300 则只查询300条
# 组合使用时的优先级: 排序 > 跳过 > 选取
#### 当3个关键全部出现在一条语句中时,先排序 再跳过 再选取
db.user.find({}).sort({age:-1}).skip(1).limit(2)
### 分页逻辑
# PageCount 一页展示几条 2
# CurrentPageNum 当前页码数
data=skip(CurrentPageNum-1)*count
db.user.find({}).sort({age:-1}).skip(page-1*count).limit(count)
七丶MongoDB高级操作
### $all $in 针对 Array
# $in 范围查询
db.user.find({'字段':{"$in":[{条件1},{条件2}]}})
res = list(MongoDB.user.find({"name":{"$in":[123,222,55,66,7]}}))
res = list(MongoDB.user.find({"hobby":{"$in":[0]}}))
# $all 真 子集查询
db.user.find({'字段':{'$all':[符合的条件1,符合条件2]}})
res = list(MongoDB.user.find({"hobby":{"$all":[1,7,3,9,0]}})) # 子集查询
# $or 或条件
db.user.find({'$or':[{条件1},{条件2}]})
res = list(MongoDB.user.find({"$or":[{"name":123},{"age":999}]})) # 或条件
# $and 并列查询
db.user.find({'$and':[{条件1},{条件2}]})
res = list(MongoDB.user.find({"$and":[{"name":"Alexander"},{"age":999}]})) # 并列条件
八丶危险操作
# 危险操作 之 删除表
### 删表
# MongoDB.user.drop() 删除表操作 没有确认过程 直接删除
### 危险操作 之 删除库
# MongoDB.dropDatabase() 删除数据库操作 没有确认过程 直接删除
#### 额外
可以利用python ,将数据从MongoDB中查出,修改,并直接依据objectid塞回去