zoukankan      html  css  js  c++  java
  • MongoDB

    MongoDB

    1. MongoDB之原生ORM

    使用了不存在的对象即创建该对象 **不存在关系链接**

    不存在SQL语句nosql

    格式:
      [{
    id:1
    name:"蔡文姬"
    age: 16
    gender:"女"
    },
    {
    id:1
    name:"蔡文姬"
    age: 16
    sex:["女","girl","老阿姨"]
    other:{
    hobby:["男","boy","小哥哥"]
    }
    }]
    1. 首先创建一个数据库
    use SS2Day4 穿件数据库并使用该数据库
    db 显示当前使用的数据库
    db.users  创建并使用Collection(表)

    2. 增查改删(insert find update remove)
    插入:
    db.users.insert({"name":"蔡文姬","age":16}) # 建议不要使用 不推荐使用

    查询:
    db.users.find() #无条件查找:将该表(Collection)中所有的数据一次性返回
    更新:
    db.users.update({"name":"蔡文姬"},{$set:{"age":18}})# 建议不要使用 不推荐使用
    删除:
    db.users.remove({"age":21}) # 建议不要使用 不推荐使用
           remove({"name":"DragonFire"}) : 条件删除name等于"DragonFire"的所有Document

    -------------------------------------------------------------------------------
    table Collections
    row Documents 数据条目
    column Field 字段(key值)

    2.MongoDB 数据类型

    数据类型:

    (1)Object  ID :Documents 自生成的 _id
       
       Object ID :Documents 自生成的 _id 并且 不支持转换成JSON字符串
    ?:{"_id" : ObjectId("5bda5293c6c72e52ffc7e91e")}
    ObjectId:"5bda5293c6c72e52ffc7e91e"
    0-8字节是时间戳,
    9-14字节的机器标识符,表示MongoDB实例所在机器的不同;
    15-18字节的进程id,表示相同机器的不同MongoDB进程。
    19-24字节是计数器
            #以上四种标识符拼凑成世界上唯一的ObjectID
    #只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
    #可以得到以上四种信息

    #注意:这个类型是不可以被JSON序列化的

    (2)String: 字符串,必须是utf-8

    (3)Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)

    (4)Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)

    (5)Double:浮点数 (没有float类型,所有小数都是Double)

    (6)Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)

      {
           "_id" : ObjectId("5b163830993ddc4cd4918ead"),
           "name" : "LuffyCity",
           "teacher" : [
               "DragonFire",
               "WuSir2B",
               "Alex AGod"
          ]
      }

    (7)Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典

      {
           "_id" : ObjectId("5b163915993ddc4cd4918eaf"),
           "name" : "LuffyCity",
           "course" : {
               "name" : "Python",
               "price" : 19800
          }
      }

    (8)Null:空数据类型 , 一个特殊的概念,None Null

    (9)Timestamp:时间戳

      {
           "_id" : ObjectId("5b163bbf993ddc4cd4918eb3"),
           "name" : "LuffyCity",
           "date" : 1528183743111
      }

    (10)Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

      {
           "_id" : ObjectId("5b163ba1993ddc4cd4918eb2"),
           "name" : "LuffyCity",
           "date" : ISODate("2018-06-05T15:28:33.705+08:00")
      }

    3. 增删改查支持方式

    insert:
    db.users.insertMany([{"name":"王三"},{"name":"王舞"}])  # 插入多条
       db.user.insertOne({"name":"刘老师"})  # 插入一条

       
       
    remove:
       #remove({}):无条件删除数据,这里要注意了,这是删除所有数据,清空Collection
       db.users.deleteOne({"age":63})
       db.users.deleteMany({"age":30})

       
       
    update:
      ({"条件"},{"关键字":{"修改内容"}})
       如果条件为空,那么将会修改Collection中所有的数据
       
    updateOne({"age":19},{$set:{"name":"WSSB"}}):根据条件修改一条数据的内容,如出现多条,只修改最高前的数据
    updateMany({"age":19},{$set:{"name":"pig_qi"}}):根据条件修改所有数据的内容,多条修改

    把age等于19的所有数据中的name改为WSSB



    find:
       没有findMany
    db.users.find({})
       
    db.users.findOne({})  
       db.user.findOne({"name":"王舞"})
       #findOne()无条件查找一条数据,默认当前Collection中的第一条数据
       #一条数据转为 json格式

    4. 数学比较符

    $lt: <
    $lte: <=
    $gt: >
    $gte: >=
    $eq: ==
    : : == or =  "name":"王舞" name=王舞

    5. $

        "$"  update 加上关键字 变成了 修改器
       其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符

       存储满足条件的数据下标索引位置(满足查询条件一条数据下标索引)
    db.users.updateOne({"other.name":"linux","name":"银网吧"},{$set:{"other.$.score":19}})
      $定位不到第二层
    弊端:[
    [1,2,3],
    [{k:{zk:zv}},{k2:v2},{k3:v3}],
    [4,5,6],
    ]
    深度查询查询速度慢(建议最大4层)

    6. $关键字 查询

    $or : db.users.find({$or:[{age:18},{name:"银网吧"}]})

    $and : ,  (一般不用)

    $in : db.users.find({age:{$in:[18,84,73]}})

    $all : db.users.find({hobby:{$all:[1,2,3,4,5,6]}})
       查询条件必须包含在列表里([1,2,3]可以,[2,3,4,5,7]不行)

    7. $修改器 update

    $set: 
       直接将字段的值设定为value

    $unset:
       删除字段(用来删除Key(field)的)

    $inc:
       将查询到的结果 加上某一个值 然后保存
       原值增加 db.users.updateMany({name:"金王吧"},{$inc: {cursors: 1}})
       db.users.updateMany({name:"金王吧"},{$inc: {cursors: -10}})

    8. $array 修改器

    $push :
      它是用来对Array (list)数据类型进行 增加 新元素的,相当于Python中 list.append() 方法
    append(item) db.users.updateMany({name:"金王吧"},{$push: {hobby:10}})

    $pull :
       有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素
    remove(item) db.users.updateMany({name:"金王吧"},{$pull: {hobby:10}})

    $pop :
       指定删除Array中的第一个 最后一个 元素
    pop() db.users.updateMany({name:"金王吧"},{$pop: {hobby:-1}})  1最后一个 -1第一个
      {$pop:{"test_list" : -1}}  -1 代表最前面, 1 代表最后边 (这和Python正好相反)

    9.Array Object 的特殊操作

    建立一条数据包含array object

    {
       "_id" : ObjectId("5b17d01a49bf137b585df891"),
       "name" : "骑士计划",
       "price" : [
           19800,
           19500,
           19000,
           18800
      ],
       "other" : {
           "start" : "2019年11月1日",
           "start_time" : "09:30",
           "count" : 150
      }
    }

    (1) 把price 中的 19000 改为 19300
    db.users.update({"name":"骑士计划"},{$set:{"price.2":19300}})
    这里引用了下标的方法更改数值,"price.2"代指Array中的第三个元素

    (2)如果price.1 中小于19800 则加200
    db.users.update({"name":"骑士计划","price":{$lt:19500}},{$inc:{"price.$":200}})

    (3)把other中 count 改为 199
    db.users.update({"name":"骑士计划"},{$set:{"other.count":199}})

    对了就是在这个对象 打点儿 key 就可以更改数值了 , 要注意的是, 咱们用的 $set 进行修改的,那么就意味着,如果没有"other.count"这个field的话,他会自动创建


    (4)如果 count 小于 200 那么 10
    db.users.update({"name":"骑士计划","other":{$lt:200}},{$inc:{"other.count":10}})
    Array + Object 的用法 
    {
       "_id" : ObjectId("5b17de9d44280738145722b9"),
       "name" : "骑士计划",
       "price" : [
          {
               "start" : "2018年8月1日",
               "start_time" : "08:30",
               "count" : 150
          },
          {
               "start" : "2018年8月2日",
               "start_time" : "09:30",
               "count" : 160
          },
          {
               "start" : "2018年8月3日",
               "start_time" : "10:30",
               "count" : 170
          },
          {
               "start" : "2018年8月4日",
               "start_time" : "11:30",
               "count" : 180
          }
      ]
    }

    (1)把count 大于 175 的field  15
    db.users.update({"price.count":{$gt:175}},{$inc:{"price.$.count":15}})

    (2) count 大于 180 start 改为 "2018年8月10日"
    db.users.update({"price.count":{$gt:180}},{$set:{"price.$.start":"2017年8月10日"}})

    10. Limit选取 Skip跳过 Sort排序

    (1)limit : 
       db.users.find({}).limit(2) 显示条目数量
       limit(2) 就是选取两条Document(数据条目), 从整个Collection的第一条 Document 开始选取两条

    (2)skip :跳过  db.users.find({}).skip(1) 跳过条目数量
        skip(2) 就是跳过两条Document, 从整个Collection 的第一条 Document 开始跳,往后跳两条
       
    (3)简单分页(limit+skip)
       db.users.find({}).limit(当前页码*每页条目).skip(每页条目)

    (4)Sort 排序 : 将结果按照关键字排序
      db.users.find({}).sort({ "price":1 })     1:ASC -1:DESC
       按照 price 字段进行升序 , 1 为升序 , -1 为降序

    (5) 分页排序多重用法 Limit + Skip + Sort:
    db.users.find({}).sort({ age:-1 }).limit(2).skip(2)

    ***重点 : Sort + Skip + Limit 是有执行优先级的 他们的界别分别是
              优先 Sort  其次 Skip 最后 Limt

    Skip + Limit 的优先级 也是先 Skip Limit**

    11. python 操作MongoDB

    安装 pymongo

    import pymongo
    mongo = pymongo.MongoClient("127.0.0.1",27017)
    MONGODB = mongo["SS2DAY04"]

    增删改查

    1.查(find find_one)
    result = list(MONGODB.users.find({}))
     for item in result:
        print(item)
     print(result)

    result_one = MONGODB.users.find_one({})


    2. (insert_one insert_many)
    res = MONGODB.student.insert_one({"name":"yd","nickname":"wl"})
    print(res.inserted_id,type(res.inserted_id))
    res = MONGODB.student.insert_many([{"name":"yd","nickname":"wl"},     {"name":"wpq","nickname":"cb"},{"name":"lj","nickname":"dsb"}])

    print(res.inserted_ids)

    3. 删(remove  delete_one delete_many)
    # MONGODB.student.remove({})
    # MONGODB.student.delete_one({"name":"yd"})
    # MONGODB.student.delete_many({"name":"yd"})

    4. (update update_one update_many)
    # MONGODB.student.update({"name":"yd"})
    # MONGODB.student.update_one({"name":"wpq"},{"$set":{"nickname":"peppa pig"}})
    # MONGODB.student.update_many({},{"$set":{"age":84}})

    5. 分页
    res = MONGODB.users.find({}).sort("age",pymongo.ASCENDING).limit(2).skip(0)
    for i in res:
        print(i)
    # 删:
    # MONGODB.student.delete_many({}) #清除数据
    # MONGODB.student.drop()   # 删除表格
  • 相关阅读:
    debian安装后sudo不能用的问题
    分组筛选数据,某个数据字段比如说患者就诊超过一次的,身份证号会重复出现的,sql语句,备忘用的
    《精通Git》翻译系列(二)
    配置mysql允许远程连接
    raspberry pi下使用mp3blaster播放mp3音乐
    MSSQL常用语句备注1
    设计的四大原则
    在树莓派下安装mysql的相关查询记录
    查看数据库日志,收缩数据库
    芒果功效与作用
  • 原文地址:https://www.cnblogs.com/kingyanan/p/9903305.html
Copyright © 2011-2022 走看看