MongoDB学习笔记
2020-07-25 本文已影响0人
dev_winner
-
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没有的一些数据类型,如
Date
和BinData
类型。 - BSON采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的三个特点,可以有效描述非结构化数据和结构化数据。这种格式的优点是灵活性高,但它的缺点是
空间利用率不高
。 - BSON中,除了基本的JSON类型:
string
、integer
、boolean
、double
、null
、array
和object
,MongoDB还使用了特殊的数据类型:date
、object id
、binary data
、regular expression
和code
。 - 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 dbs
或show 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 collections
或show 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})