• MongoDB


    1Mongo基础概念

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

    操作简单方便易懂 更加接近程序员操作 原生语法ORM
    因为是非关系型数据库,没有结构限制,扩展性很强

    安装MongoDB

    配置环境变量 - Path :MongoDB/bin
    CMD -
    mongod 启动命令
        --dbpath 数据库存放路径(数据库存放路径必须存在)

       因为是临时修改的,记得每次打开时 修改   dbpath
    27017 MongoDB的默认端口
    mongo 开启客户端 默认连接地址是本机

    2增删改查

    基本操作指令: 

    db -- 当前使用的数据库 查看名称,代指当前使用的数据库
    show databases -- 查看当前服务器磁盘上的所有数据库
    use dbname -- 切换当前使用的数据库 或者在内存中创建一个新的数据库 赋值给 db
    show tables -- 查看当前数据库中所有磁盘中的表
    db.tablename -- 使用当前数据库中的tablename表 在内存中创建表

    使用不存在的对象即创建该对象

    初级版:

      增 db.tablename.insert({name:
    "123"}) #在磁盘中写入数据{name:"123"} db.tablename.insert([{name:"123"},{name:"123"}]) #在磁盘中写入多条数据 查 db.tablename.find({查询条件}) # 查询所有符合条件的数据 db.tablename.find({name:"345"}) # 查询符合{name:"345"}的所有数据 改 db.tablename.update({查询条件},{$修改器:{修改属性}}) # 根据查询条件,修改符合条件的第一条数据 修改器:认定当前修改的类型 $set设置类型修改器 强制修改某字段的值 db.tablename.update({name:"345"},{$set:{name:789}}) db.tablename.update({name:"123"},{$set:{gender:1}}) 符合不存在即创建的原则 删 db.tablename.remove({查询条件}) # 删除所有符合条件的数据 删除表格 - db.tablename.drop() 删除库 - db.dropDatabase()

    官方给出新的推荐增删改查版本

    官方不在推荐使用insert了
    db.tablename.insert({name:"123"}) #在磁盘中写入数据{name:"123"}
    db.tablename.insert([{name:"123"},{name:"123"}]) #在磁盘中写入多条数据

    insertedId = db.stu.insertOne({name:"666"})
    insertedIds = db.stu.insertMany([{name:777},{name:999}])
    # insertedId 是增加数据的_id ObjectId
    # insertedIds 是增加数据的_id ObjectId 列表 [ObjectId(),ObjectId()]


    db.tablename.find({查询条件}) # 查询所有符合条件的数据
    db.tablename.find({name:"345"}) # 查询符合{name:"345"}的所有数据

    官方在3.2版本中加入了新的写法
    json = db.tablename.findOne({查询条件}) # 查询符合条件的第一条数据


    db.tablename.update({查询条件},{$修改器:{修改属性}})
    # 根据查询条件,修改符合条件的第一条数据
    修改器:认定当前修改的类型 $set设置类型修改器 强制修改某字段的值
    db.tablename.update({name:"345"},{$set:{name:789}})
    db.tablename.update({name:"123"},{$set:{gender:1}}) 符合不存在即创建的原则

    3.2
    db.tablename.updateOne({name:"345"},{$set:{name:789}}) 根据查询条件,修改符合条件的第一条数据
    db.tablename.updateMany({name:"345"},{$set:{name:789}})根据查询条件,修改所有符合条件的数据


    官方不在推荐使用:
    db.tablename.remove({查询条件}) # 删除所有符合条件的数据

    3.2
    db.tablename.deleteOne() # 删除符合条件的第一条数据
    db.tablename.deleteMany() # 删除所有符合条件的数据



    insertMany   insertOne

    find   findOne

    updateOne   updateMany

    3MongoDB 数据类型

    MongoDB 之 丰富多彩的数据类型世界
    
    首先我们要先了解一下MongoDB中有什么样的数据类型:
    
    Object  ID :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类型,时间戳可以秒杀一切时间类型)
    

    Object ID

    "_id" : ObjectId("5b151f8536409809ab2e6b26")
    
    #"5b151f85" 代指的是时间戳,这条数据的产生时间
    #"364098" 代指某台机器的机器码,存储这条数据时的机器编号
    #"09ab" 代指进程ID,多进程存储数据的时候,非常有用的
    #"2e6b26" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
    #以上四种标识符拼凑成世界上唯一的ObjectID
    #只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
    #可以得到以上四种信息
    
    #注意:这个类型是不可以被JSON序列化的

    这是MongoDB生成的类似关系型DB表主键的唯一key,具体由24个字节组成:

    0-8字节是时间戳,

    9-14字节的机器标识符,表示MongoDB实例所在机器的不同;

    15-18字节的进程id,表示相同机器的不同MongoDB进程。

    19-24字节是计数器

    其他的较为常见  可参考网上资料

     4$关键字     $修饰器

    1$数学比较符

    $lt 小于
    $lte 小于等于
    $gt 大于
    $gte 大于等于
    $eq : 等于
    $ne 不等于

    2 修改器

    $修改器 + $ 字符特殊用法
        针对单个字段的操作:
        $set 修改某个字段的值 db.stu.update({age:20},{$set:{name:"绿绿",gender:1}})
    $unset 删除字段 db.stu.update({name:
    "小黑"},{ $unset: { newField:1 } })
    $inc 引用增加 先引用 后增加 db.stu.update({},{$inc:{age:
    -1}}) 针对 Array == list 操作 $push == append() 在Array的最后一个位置中增加数据 db.stu.update({name:"小黑"},{ $push: { hoobys:"渣男" } }) $pushAll == extend() db.stu.update({name:"小黑"}, {$pushAll: {"hoobys":[1,2,3,5]}}, ) $pullAll db.stu.update({name:"小黑"}, {$pullAll: {"hoobys":[1,2,3,5]}}, ) $pull == remove() 删除Array中的指定元素 db.stu.update({name:"小黑"},{ $pull: { hoobys:"渣男" } }) $pop (=) pop() 删除Array中的第一个或者最后一个元素 正数是倒序删除 负数是正序删除 db.stu.update({name:"小黑"},{ $pop: { hoobys:1 } })

    在MongoDB中有一个非常神奇的符号 "$"

    "$"  在 update 中 加上关键字 就 变成了 修改器

    其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符

    $ 字符特殊用法
        存储当前(Array)符合条件的元素下标索引 ,只能存储最外层的 索引位置 
        例子:hobbys中等于5的元素改为 "" 
        先查询到hobbys中5的 位置(2) ,将位置存储在 $==(2) 字符中 然后根据$字符的位置(2)更改数据
        
      db.stu.update({"hoobys":5},{ $set: {"hoobys.$":""} })
    
    
      db.info.updateMany({name:"xiaohei",'hobbys':2},{$set:{'hobbys.$':"er"}})
    
    
    
        Object操作:
        db.stu.update({name:"小黑"},{ $set: { "hobby.烫头":"锡纸" } })
        
        Array + Object

      注意 混合使用。。。。。。

    5查询关键字

    查询关键字
        并列查询         $and        
        db.tablename.find({name:"345",age:1})    
        db.stu.find({$and: [{name:"绿绿"},{age:20}]})
        
        或条件查询        $or
        db.stu.find({$or:[{name:"绿绿"},{name:"小黑"}]})
        
        子集查询        $all
        db.stu.find({"user_list":{$all:["dashabi","alex"]}})
        
        范围查询        $in
        ["绿绿","黑黑","红红","小黑"]
        db.stu.find({name:{$in:["绿绿","黑黑","小红","小黑"]}})

    6排序 + 选取 + 跳过

    排序 + 选取 + 跳过
    排序:sort 
    db.stu.find().sort({ age:1 }) 1正序 -1倒序
    
    选取:limit
    db.stu.find().limit(2) 选取两条数据
    
    跳过:skip
    db.stu.find().skip(2) 跳过前两条数据
    
    选择中间两条 or 跳过前N条
    db.stu.find().skip(0).limit(2).sort({ age:-1 })
    
    先排序 - 跳过 - 选取
    var page = 1
    var num = 2
    var sk = (page-1) * num
    db.stu.find().skip(sk).limit(num).sort({ age:-1 })

    7Python 操作 MongoDB

    pip install pymongo

    # 导入模块
    import json
    
    from bson import ObjectId
    from pymongo import MongoClient
    
    from pymongo.cursor import  Cursor
    
    my_client = MongoClient("127.0.0.1", 27017)
    mdb = my_client["mytest"]
    
    # 增
    # 增加数据时,res.instered_id   和res.instered_ids   都是ObjectId   不是字符串
    # res=mdb.user.insert_one({"name":"xiaobai"})
    # print(res.inserted_id)
    # 5d2f2422f5d5468171fb83db
    
    # res=mdb.user.insert_many([{"name":"aaa","age":12},{"name":"bbb","age":13}])
    # print(res.inserted_ids)
    
    # [ObjectId('5d2f28a92f14a218331d8757'), ObjectId('5d2f28a92f14a218331d8758')]
    
    # 查
    
    # 转化为json 字符串
    # res=list(mdb.user.find({}))
    # # print(res)
    #
    # res_list=[]
    # for user in res:
    #     user["_id"]=str(user.get("_id"))
    #     res_list.append(user)
    #
    # res_json=json.dumps(res_list)
    # print(res_json)
    
    
    # 转化为json 字符串 方法二
    # res=list(mdb.user.find({}))
    #
    # for index,user in enumerate(res):
    #     res[index]["_id"]=str(user["_id"])
    # res_json=json.dumps(res)
    # print(res_json)
    
    # res=mdb.user.find_one({"name":"aaa"})
    # print(res)
    # res=mdb.user.find_one({"_id":ObjectId('5d2f266f67b7974956dd0f6c')})
    #
    # res["_id"]=str(res.get("_id"))
    # # print(res,str(res.get("_id")))
    # res_json=json.dumps(res)
    # print(res_json)
    
    # 改
    # res=mdb.user.update_one({"name":"aaa"},{"$set":{"name":"AAA"}})
    # print(res)
    # print(res.modified_count)
    
    # user=mdb.user.find_one({"name":"AAA"})
    # user["gender"]="male"
    # user["age"]=11
    # user["hobby"]=["football","basktball"]
    # res=mdb.user.update_one({"name":"AAA"},{"$set":user})
    
    # user1 = mdb.user.find_one({"name": "AAA"})
    # # user1["hobby"].append("pingpang")
    # # user1["hobby"].remove("football")
    # # res=mdb.user.update_one({"name":"AAA"},{"$set":user1})
    # res=mdb.user.update_one({"name":"AAA"},{"$set":{"hobby":user1.get("hobby")}})
    
    # 删
    # res=mdb.user.delete_one({"name":"xiaohong"})
    # print(res.deleted_count)
    
    
    # list   skip    limit
    import pymongo
    # res=list(mdb.user.find().sort("age",pymongo.DESCENDING))
    # res=list(mdb.user.find().skip(2))
    # res=list(mdb.user.find().limit(2))
    
    
    # res=mdb.user.find({}).sort("age",pymongo.DESCENDING).skip(2).limit(3)
    #
    # for user in res:
    #     print(user)
  • 相关阅读:
    PyTorch深度学习:60分钟入门(Translation)
    强化学习入门·
    leetcode 697. Degree of an Array
    耶路撒冷圣城起源笔记
    仓储机器人路径规划笔记
    算术编码原理
    ★房贷计算器 APP
    Sublime
    CocoaPods
    Xcode 6 创建 Objective-C category
  • 原文地址:https://www.cnblogs.com/XLHIT/p/11203658.html
Copyright © 2020-2023  润新知