1.MongoDB与MySQL之间区别

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

通过实例图,了解MongoDB全部概念
二、MongoDB概念解析 - 图1
以及MongoDB操作命令
1.数据库
# 创建数据库 (库不存在,则创建数据库,否则切换到指定数据库)
>use test
switched to db test
# 查看当前的数据库
>db
test
# 查看所有的数据库
>show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
# 删除当前数据库
>db.dropDatabaase()
{“droppped”:”test”,”ok”,1}
2.集合
# 创建集合 db.createCollection(name, options)
参数说明:
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
>db.createCollection(“MyCol”)
>db.createCollection(“MyCol_1”)
{“ok”:2}
# 查看已有集合
>show collections
MyCol
MyCol_1
# 创建有关键参数的集合 例如创建固定集合 mycol,整个集合空间大小 6142800 B, 文档最大个数为 10000 个
>db.createCollection(“mycol”,{capped:true,autoIndexId:true,size:6142800,max:10000})
{“ok”,1}
# 在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
>db.mycol2.insert({“name”:”张三”})
>show collections
mycol2
# 删除结合 例如删除集合mycol2
>db.mycol2.drop()
true
3.文档
# 向集合中插入文档 db.COLLECTION_NAME.insert(document)
# 如 向结合MyCol中插入文档
>db.MyCol.insert({name:’张三’,age:’20’,hobby:[‘吃’,’喝’,’玩’]})
# 查看已插入的文档
>db.MyCol.find()
{name:’张三’,age:’20’,hobby:[‘吃’,’喝’,’玩’]}
# 可以将数据定义为一个变量,如下所示:
> document=({name:’张三’,age:’20’,hobby:[‘吃’,’喝’,’玩’]});
#执行插入操作
db.MyCol.insert(document)
# 方法 db.collection.insertOne() 和 db.collection.insertMany()分别插入一个新文档和多个新文档
>db.collection.insertOne(
,
{
writeConcern:
}
)
>db.collection.insertMany(
[ , , … ],
{
writeConcern: ,
ordered:
}
)
# 参数说明
document:要写入的文档。
writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
ordered:指定是否按顺序写入,默认 true,按顺序写入。
# 更新文档 例如将张三改为张三百
>db.MyCol.update({‘name’:’张三’},{$set:{‘name’:’张三百’}})
# 删除文档 例如,移除name为’张三百’
>db.MyCol.remove({‘name’:’张三百’})
二、MongoDB概念解析 - 图2

2.MongoDB数据类型

下表为MongoDB中常用的几种数据类型。

数据类型 描述
String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
Boolean 布尔值。用于存储布尔值(真/假)。
Double 双精度浮点值。用于存储浮点值。
Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
Array 用于将数组或列表或多个值存储为一个键。
Timestamp 时间戳。记录文档修改或添加的具体时间。
Object 用于内嵌文档。
Null 用于创建空值。
Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Object ID 对象 ID。用于创建文档的 ID。
Binary Data 二进制数据。用于存储二进制数据。
Code 代码类型。用于在文档中存储 JavaScript 代码。
Regular expression 正则表达式类型。用于存储正则表达式。

3.使用场景

对于MongoDB实际应用来讲,是否使用MongoDB需要根据项目的特定特点进行甄别,这就需要我们对MongoDB适用和不适用的场景有一定的了解。
MongoDB 的适用场景如下:

  • 网站实时数据:mongoDB非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
  • 数据缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启之后,由MongoDB搭建的持久化缓存层可以避免下层的数据源过载。
  • 大尺寸、低价值数据存储:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
  • 高伸缩性场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。MongoDB 的路线图中已经包含对MapReduce 引擎的内置支持。
  • 对象或JSON 数据存储:MongoDB 的BSON 数据格式非常适合文档化格式的存储及查询。

    不适合场景
  • 高度事务性系统:例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。

  • 传统的商业智能应用:针对特定问题的BI 数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
  • 需要复杂SQL 查询的问题。