美文网首页
MongoDB学习笔记

MongoDB学习笔记

作者: dev_winner | 来源:发表于2020-07-25 09:00 被阅读0次
    • MongoDB是一个开源、高性能、无模式的文档型数据库,是NoSQL产品中的一种。
    • MongoDB中记录的是一个文档,所谓文档就是一种类似于JSON的格式叫BSON,它是一种由字段和值对组成的数据结构。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可包括其他文档、普通数组和文档数组。
    • 应用场景:MongoDB可应对“三高”(高并发高性能高可用)需求。如:

    ①社交场景:用于存储用户个人信息;用户发表的朋友圈信息;通过地理位置索引实现附近的人、地点等功能。
    ②游戏场景:用于存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、高效率存储和访问。
    ③物流场景:用于存储订单信息,订单状态在运送过程中会不断更新,以内嵌数组的形式来存储,一次查询就能将该订单所有的变更读取出来。
    ④物联网场景:用于存储所有接入的智能设备信息,设备汇报的日志信息,并对这些信息进行多维度的分析。
    ⑤视频直播:用于存储用户信息、点赞互动信息等。

    • 以上这些应用场景中,数据操作方面的共同特点是:①数据量大;②读写操作都很频繁;③数据价值较低,对事务性要求不高。
    SQL术语 MongoDB术语 解释
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column field 数据字段/域
    index index 索引
    table joins - 表连接/MongoDB不支持
    - 嵌入式文档 MongoDB通过嵌入式文档来替代多表连接
    primary key primary key 主键/MongoDB自动将_id字段设置为主键
    • MongoDB的最小存储单位是文档(document)对象,对应关系型数据库的行(row)。数据在MongoDB中以BSON(Binary-JSON)文档的格式存储在磁盘上。
    • BSON和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如DateBinData类型。
    • BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是空间利用率不高
    • BSON中,除了基本的JSON类型:stringintegerbooleandoublenullarrayobject,MongoDB还使用了特殊的数据类型:dateobject idbinary dataregular expressioncode
    • BSON数据类型参考列表:
    数据类型 描述 举例
    字符串 UTF-8字符串都可表示为字符串类型的数据 {"x" : "foobar"}
    对象id 文档的12字节唯一ID,类似UUID {"X" :ObjectId() }
    布尔值 真或假:true或false {"x": true}
    数组 值的集合或列表可以表示成数组 {"x" : ["a", "b", "c"]}
    32位整数 类型不可用。JavaScript仅支持64位浮点数,所以32位整数会被自动转换 shell是不支持该类型的,shell中默认会转换成64位浮点数
    64位整数 不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数 shell是不支持该类型的,shell中默认会转换成64位浮点数
    64位浮点数 shell中的数字就是这一种类型 {"x": 3.14159,"y": 3}
    null 表示空值或未定义的对象 {"x": null}
    undefined 文档中可以使用未定义类型 {"x": undefined}
    符号 shell不支持,shell会将数据库中带符号类型的数据自动转换成字符串 -
    正则表达式 文档中可以包含正则表达式,采用JavaScript的正则表达式语法 {"x" :/foobar/i}
    代码 文档中还可以包含JavaScript代码 {"x" : function() { /* …… */ }}
    二进制数据 二进制数据可以由任意字节的数字串组成,不过在shell中无法使用 -
    最大值/最小值 BSON包括一个特殊类型,表示可能的最大值/最小值。shell中没有这个类型。 -
    • 选择和创建数据库:use 数据库名称
    • 查看(有权限查看)的所有数据库:show dbsshow databases
    • 查看当前正在使用的数据库:db
    • 删除当前正在使用的数据库:db.dropDatabase()
    • MongoDB 中默认的数据库为test,若没有选择数据库,则集合存放在 test 数据库中。
    • 数据库名可以是满足以下条件的任意UTF-8字符串:

    1、不能是空字符串("");
    2、不得含有' '(空格)、.$/\\0 (空字符);
    3、应该全部小写;
    4、最多为64个字节。

    • 有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库:

    1、admin:从权限的角度来看,这是root数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
    2、local:此数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
    3、config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

    • 显示创建集合:db.createCollection(name)
    • 查看当前数据库的所有集合(表): show collectionsshow tables
    • 删除当前数据库的某个集合:db.集合.drop(),删除成功则返回true,否则返回false。
    • 使用insert()save()方法向集合中插入一个文档,语法如下:
    db.collection.insert(
     <document or array of documents>,
     {
      writeConcern: <document>,
      ordered: <boolean>
     }
    )
    
    • 如向comment的集合(表)中插入一条测试数据:
    db.comment.insert({"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})
    

    相关文章

      网友评论

          本文标题:MongoDB学习笔记

          本文链接:https://www.haomeiwen.com/subject/xueqbctx.html