Mongodb
介绍
NoSQL 文件型数据库 非关系型
# MySQL DataBase Tables Column Row # MongoDB DataBase Collections Field Documents MySQL: id name age sp wq 1 孙悟空 99999999 null 定海神针 2 沙悟净 9999999 唐僧同款项链 null MongoDB: { id:1, name:孙悟空, age:99999999, wq: 定海神针, ts: 紧箍 fs: 虎皮裙儿,红丝袜,长筒靴 hobby:["铁扇公主","紫霞","晶晶"] skill:[ { name:"火眼金睛", content:"透视" },{ name:"变大小", content:"变~~~~~~~~~" } ] }, { id:2, name:沙悟净, age:9999999, sp: 唐僧同款项链 } MongDB存储的就是JSON数据
安装
MongDB: 1.默认监听端口是 27017 | Mysql:3306 | Redis:6379 2.MongoDB 启动 "mongod" 指定 MongoDB 数据存储目录 --dbpath="d:/data/db"
3.连接进入cmd
mongo
MongoDB命令
数据库和表
1.show databases 查看本地磁盘中的数据库 2.use databasename 切换当前使用的数据库 3.db 查看当前使用的数据库 4.show tables 查看当前数据库磁盘中的表 # 创建数据库 use 不存在的数据库名 即 在内存中创建该数据库 # 创建表 db.不存在的表名 即 在数据库中创建该表(内存中) 使用了不存在的对象 即 创建该对象 # 危险操作 之 删除表 # MongoDB.user.drop() 删除表操作 没有确认过程 直接删除 # 危险操作 之 删除库 # MongoDB.dropDatabase() 删除数据库操作 没有确认过程 直接删除
表操作
增
db.tablename.insert({}) db.user.insert({name:"沙悟净",age:66.666,hobby:[1,2,3,4,5]}) db.user.insert([{},{}])
官方推荐写法 in 3.2: db.user.insertOne({}) 增加一条数据 db.user.insertMany([{},{}]) 批量增加数据
查
db.tablename.find({查询条件}) 查询所有符合条件的数据 db.user.find({name:"沙悟净"}) 条件查询 db.user.find({name:"沙悟净",age:77}) 并列条件查询 db.user.findOne({}) 查询符合条件的第一条数据 返回JSON数据 $数据比较符 db.user.find({age:{$gt:70}}) $lt 小于 $lte 小于等于 $gt 大于 $gte 大于等于 $eq 等于 $ne 不等于 # 高级查询操作 # $or $and $all $in res = list(MongoDB.user.find({"$and":[{"name":"Alexander"},{"age":999}]})) # 并列条件 res = list(MongoDB.user.find({"$or":[{"name":123},{"age":999}]})) # 或条件 res = list(MongoDB.user.find({"name":{"$in":[123,222,55,66,7]}})) $all $in 针对 Array res = list(MongoDB.user.find({"hobby":{"$in":[0]}})) res = list(MongoDB.user.find({"hobby":{"$all":[1,7,3,9,0]}})) # 子集查询 print(res)
改
db.tablename.update() 修改符合条件的第一条数据 # 所有MongoDB的修改全部基于 修改器 # $修改器 关键字 # $关键字: db.user.updateOne({name:"太白金星","stdent.name":"MPy"},{$set:{"stdent.$.name":"Anyway"}}) db.user.updateOne({name:"太白金星",hobby:"喝酒"},{$set:{"hobby.$":"飙车"}}) $是用来存储符合当前Array条件元素的下标索引 当前Array - ["抽烟","喝酒","剃头"] 条件元素 - {hobby:"喝酒"} 当前Array - 第2个元素符合条件 它的下表索引是 1 当前$ 的值就是 1 如果使用".索引"的方式来操作Array "字段.索引位置"
官方推荐 db.user.updateOne({},{}) 修改符合条件的第一条数据 db.user.updateMany({},{}) 修改符合条件的所有数据 $set db.user.update({age:66.666},{$set:{age:44}}) 强制的将某字段值修改 db.user.update({name:"孙大圣"},{$set:{ag18e:18}}) 如果该字段不存在即创建该字段并赋值 $unset db.user.update({name:"孙大圣"},{$unset:{ag18e:1}}) 删除字段 $inc db.user.update({name:"孙大圣"},{$inc:{age:1}}) 引用增加 先引用原有数据 在原有数据基础上增加 db.user.update({name:"孙大圣"},{$inc:{age:-1}}) 减少
针对 Array List操作 $push == append db.user.update({name:"孙大圣"},{$push:{hobby:"8"}}) 在Array类型中增加数据在最末端增加 $pushAll == extends db.user.update({name:"孙大圣"},{$pushAll:{hobby:[9,10,11,12]}}) 在Array类型中增加数据在最末端增加多条数据 $pull == remove() db.user.update({name:"孙大圣"},{$pull:{hobby:"8"}}) 删除所有符合条件的数据 $pullAll db.user.update({name:"孙大圣"},{$pushAll:{hobby:[9,10,11,12]}}) 遍历删除所有符合条件的数据 $pop ~= pop() 删除Array中第一条或最后一条 db.user.update({name:"孙大圣"},{$pop:{hobby:-1}}) 删除第一个数据 db.user.update({name:"孙大圣"},{$pop:{hobby:1}}) 删除最后一个数据
删
db.tablename.remove({查询条件}) 删除符合条件的所有数据 db.user.remove({}) 如果条件为空则删除所有数据 危险! 官方推荐的写法: db.user.deleteOne({}) # 删除符合条件的第一条数据 db.user.deleteMany({}) # 删除所有符合条件的数据 危险! 如果条件为空则删除所有数据
MongoDB数据类型
https://www.cnblogs.com/DragonFire/p/9135854.html
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条 db.user.find({}).sort({age:-1}).skip(1).limit(2) 当3个关键全部出现在一条语句中时,先排序 再跳过 再选取 分页(每页2条数据): count = 2 page = 1 skip(page-1*count) db.user.find({}).sort({age:-1}).skip(page-1*count).limit(count) 1 2 0 1 2 2 2 1 3 2 4 1 4 2 6 1 5 2 8 1
Pymongo
python下安装Pymongo,操作MongoDB
# 开始使用PyMongo 操作MongoDB # 1.导入PyMongo import json from pymongo import MongoClient MC = MongoClient("127.0.0.1",27017) # 创连接 创建MongoDB客户端 db = MC["S22"] # 选择或创建数据库 (内存) player_info = { "nickname":"钱雨", "atc":5, "def":99, "hp":500, "skill":[ { "name":"铁头功", "def":50 }, { "name":"见义勇为", "hp":999 } ] } # 增加数据 # res = db.player.insert_one(player_info) # print(res.inserted_id,type(res.inserted_id)) 当前新增数据的 ObjectId # res = db.player.insert_many([player_info]) # print(res.inserted_ids) # 当前新增数据们的 Object # class 'bson.objectid.ObjectId' 不能被JSON序列化 但是 可以转成字符串 # 查询数据 # res = db.player.find({}) # for i in res: # print(i) # res = db.player.find_one({"nickname":"钱雨"}) # 查询符合条件的第一条数据 # print(res) # res = db.player.find_one({"nickname":"钱雨","def":{"$gt":80}}) # 查询符合条件的第一条数据 # print(res) # res["_id"] = str(res.get("_id")) # ObjectId 不能被 JSON 序列化 转换成字符串即可 # res_json = json.dumps(res) # print(res_json) # 更新数据 update # res = db.player.update_one({"nickname":"程根"},{"$set":{"hp":350}}) # print(res) # db.player.update_many({},{"$inc":{"atc":20}}) # 删除数据 # from bson.objectid import ObjectId # res = db.player.delete_one({"_id":ObjectId("5d902bca19ccfed36f87e62f")}) # print(res.deleted_count) # 排序 选取 跳过 # from pymongo import ASCENDING,DESCENDING # res = db.player.find({}).limit(2).skip(2).sort("_id",DESCENDING) # for i in res: # print(i)
Flask下的MongoDB
from flask import Flask, request, render_template, jsonify from setting import MongoDB app = Flask(__name__) @app.route("/reg",methods=["POST","gET"]) def reg(): if request.method == "GET": return render_template("reg.html") else: user_info = request.form.to_dict() res = MongoDB.user.insert_one(user_info) if res.inserted_id: return "注册成功" else: return "注册失败" @app.route("/login",methods=["POST","gET"]) def login(): if request.method == "GET": return render_template("login.html") else: user_info = request.form.to_dict() user_info_dict = MongoDB.user.find_one(user_info) user_info_dict["_id"] = str(user_info_dict["_id"]) return jsonify(user_info_dict) if __name__ == '__main__': app.run("0.0.0.0",9527)