• 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)
  • 相关阅读:
    单线程的JavaScript是如何实现异步的
    前端优化之 -- 使用 require.context 让项目实现路由自动导入
    插入排序
    选择排序
    冒泡排序
    强缓存和协商缓存
    ES6 Set求两个数组的并集、交集、差集;以及对数组去重
    实现一个new操作符
    我理解的浅拷贝和深拷贝
    javascript专题系列--js乱序
  • 原文地址:https://www.cnblogs.com/Pythonzrq/p/13254641.html
Copyright © 2020-2023  润新知