• MongoDB


    引子

    1.mysql 用户表
    id name age gender
    1 alexDSB 73 Null ## MySQL的第一条记录
    2 YWB 84 男 ## MySQL的第二条记录

    2.MongoDB 用户表:(##与MySQL存储的对比)
    { ## MongoDB的第一条记录-->是字典,是json,是object(不同的数据类型中不同的叫法)
    id:1,
    name:alexDSB,
    age:73,
    gender:Null
    },
    { ## MongoDB的第二条记录
    id:2,
    name:YWB,
    age:84,
    gender:男
    }

    学习

    下载安装

    主角登场:
    ##下载安装包: 官网 https://www.mongodb.com/download-center/community
    压缩包 https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.22.tgz
    选择3.4版本,因为一直以来用的都是3.4的,其他的没学,不会(现在最新版本已经到4.2了,大版本3和4的最大差别是3不支持事务,4支持事务,事务是什么意思呢?有提交和回滚,执行时候在内存中执行,成功了校验,校验完成提交,校验失败,回滚不提交)
    下载完成安装(或者直接解压)

    配置环境变量: 通常是将 Bin目录(包含mongod.exe 和 mongo.exe这两个文件的目录)配置到系统环境变量

    MongoDB的默认服务端口为 27017 - redis:6379 mysql:3306

    1.启动MongoDB服务 - mongod ##直接这样写要先创建数据库的存放目录 C:/data/db/
    mongod --help ##查看帮助信息
    选项 --dbpath D:/data/db/ ##手动指定数据库存放路径
    --install ##安装windows服务,会开机自启动(会拖慢开机速度),使用这个可以不将bin配置到环境变量(还是推荐配置环境变量)
    --remove ##卸载windows服务

    2.客户端的连接
    (1)使用mongodb自带的客户端 - mongo
    show databases # 查看本地磁盘上的数据库 结果是admin/local
    use dbname # 切换当前使用的数据库 eg:use local
    db # 查看当前使用的数据库 结果是local
    show tables # 查看当前数据库存放在磁盘上的数据表 结果是startup_log

    use 不存在的数据库 # 创建了数据库,当前创建的数据库没有存放在磁盘中(在内存中),所以 show databases 不显示. eg:use adminn
    db.不存在的表名 # 创建数据表,当前数据表没有存放在磁盘中(在内存中),所以 show tables 不显示. eg:db.users 结果是adminn.users
    ? 怎么存放在磁盘中 - 如果表里有数据的话,就在磁盘上了 √

    概念 - 使用了不存在的对象即创建该对象
    - 不限制数据结构
    (2)使用第三方客户端 图形化 - NoSQLBooster4MongoDB (for windows / for mac /for Linux) ##默认安装到数据库存放路径所在的盘符
    下载地址 https://nosqlbooster.com/downloads

    使用

    3.增删改查
    (1)增加数据:插入数据(insert insertOne insertMany)
    db.tablename.insert({"key":"value"}) 捎带手将库和表写入到磁盘 eg:db.users.insert({"name":"DragonFire","age":20})

    官方推荐写法:
    db.users.insertOne({"name":"DragonFire","age":20})
    db.users.insertMany([{"name":"DragonFire","age":20},{"name":"DragonFire1","age":20},{"name":"DragonFire2","age":20}])

    (2)查询数据:查询数据(find findOne) 之 这里没有findMany
    db.tablename.find() 无条件查找,查询符合条件的所有数据 #相当于select * from table
    db.tablename.find({"name":"AlexDSB"}) 条件查找:name等于AlexDSB的数据,这里会返回多条结果 #相当于select * from table where name=AlexDSB

    db.tablename.findOne() 无条件查找一条数据,默认当前Collection中的第一条数据 #相当于limit1
    db.tablename.findOne({"age":20}) 查询符合条件的第一条数据:条件查找age等于19的第一条数据,如有多条数据则返回更靠前的数据

    (3)修改数据:修改数据(update updateOne updateMany)
    db.tablename.update({"name":"AlexDSB"},{"$set":{"age":84}}) 只修改符合条件的一条数据:根据条件修改该条数据的内容,把name等于DragonFire中的age改为21,这里要注意的是({"条件"},{"关键字":{"修改内容"}}),其中如果条件为空,那么将会修改Collection中所有的数据
    $set - set修改器 强制替换覆盖

    官方推荐写法
    db.tablename.updateOne({"age":19},{$set:{"name":"WSSB"}}) 更新符合条件的第一条数据
    db.tablename.updateMany({"age":19},{$set:{"name":"pig_qi"}}) 更新符合条件的所有数据

    array+Object : db.users.updateOne({"cours.name":"装X"},{$set:{"cours.$.score":"000"}})

    (4)删除数据:
    db.tablename.remove({}) 无条件删除数据,这里要注意了,这是删除所有数据,清空Collection
    db.tablename.remove({age:73}) 条件删除所有age==73的数据

    官方推荐写法
    db.users.deleteOne() 删除符合条件的第一条数据
    db.users.deleteMany() 删除符合条件的所有数据


    4.数据类型:
    ObjectId :Documents 自动生成的 _id
    _id:ObjectId("5cb69a23815ea7295f8bad43") 自动生成的 json数据中不包含ObjectId类型 id类型uuid
    String: 字符串,必须是utf-8
    Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
    Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
    Double:浮点数 (没有float类型,所有小数都是Double)
    Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
    Object:深度<=4 如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
    Null:空数据类型 , 一个特殊的概念,None Null
    Timestamp:时间戳 通常不用这个数据类型 如果存储时间 Double
    Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)


    """
    ##我加上的
    "_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字节是计数器
    """

    5.数学比较符:
    $lt : 小于 √
    $lte: 小于等于 √
    $gt : 大于 √
    $gte: 大于等于 √

    $ne : 不等于 ##notequal
    $eq or 冒号 : 等于


    6.查询关键字:
    Array(##数组,Python中的列表)数据类型会自动遍历
    $in 或者等于相同字段 db.users.find({age:{$in:[19,109]}})
    $or 或者等于不同字段 db.users.find({$or:[{age:19},{age:84}]})
    $and or 逗号 并列条件

    $all - Array 数据类型 子集查询 db.users.find({hobby:{$all: ["罗玉凤"]}})

    7.$字符特殊用法:
    存储符合条件的元素下标索引
    用于修改字段


    8.修改器:
    $set - set修改器 强制替换覆盖(我:没有就增加键值对)
    $unset - 强制删除字段
    $inc - 引用增加

    array操作:
    $push append 在array中追加 db.users.update({name:"AlexDSB"},{$push:{hobby:"特斯垃圾"}})
    $pushAll extend 在array中追加列表中的所有元素 db.users.update({name:"AlexDSB"},{$pushAll:{hobby:["22寸轮毂","V8","欧林斯"]}})
    $pull remove 在array中删除一个元素 db.users.update({name:"AlexDSB"},{$pull: {hobby:"V8"}})
    $pullAll 在array中删除一堆元素 db.users.update({name:"AlexDSB"},{$pullAll: {hobby:["小敏","芙蓉姐姐"]}})
    $pop pop 删除第一个 -1 或最后一个 1 的值 db.users.update({name:"AlexDSB"},{$pop: {hobby:1}})

    9.skip sort limit
    sort 排序
    db.users.find({}).sort({ age:1 })
    db.users.find({}).sort({ age:1 , birthday:-1 })

    limit(1) 选取条目
    db.users.find({}).limit(3000)

    skip(1) 跳过
    db.users.find({}).skip(1)

    跳过选取
    db.users.find({}).skip(2).limit(3)

    先排序 再跳过 最后筛选
    db.users.find({}).limit(3).skip(2).sort({ age:-1 })

    分页:
    (page-1)*num
    db.users.find({}).limit(num).skip((page-1)*num)


    10.pymongo

    11.MongoDB偷换的概念
    MySql MongoDB
    DataBase == DataBase 库
    Table == Collection 表
    Colunm == Field 字段
    Row == Documents 记录

  • 相关阅读:
    animation-fill-mode
    css3 media queries
    三列,左右两列宽度固定,中间宽度自适应
    两列布局,一列定宽,一列宽度自适应
    css3 animation
    transition和animation区别
    transform 和 transition
    弹出框样式
    python map和filter函数
    leetcode Z字形字符串
  • 原文地址:https://www.cnblogs.com/lyfstorm/p/15994753.html
Copyright © 2020-2023  润新知