一、简介
MongoDB 是一款流行的开源文档型数据库。
MongoDB 数据库的一些特性:
- 面向文档存储,基于JSON/BSON 可表示灵活的数据结构
- 动态 DDL能力,没有强Schema约束,支持快速迭代
- 高性能计算,提供基于内存的快速数据查询
- 容易扩展,利用数据分片可以支持海量数据存储
- 丰富的功能集,支持二级索引、强大的聚合管道功能,为开发者量身定做的功能,如数据自动老化、固定集合等等。
- 跨平台版本、支持多语言SDK..
MongoDB 在概念模型上参考了 SQL数据库
SQL概念 | MongoDB概念 |
---|---|
database | database |
table | collection |
row | document |
column | field |
primary key | _id |
foreigen key | reference |
view | view |
index | index |
- database 数据库,与SQL的数据库(database)概念相同,一个数据库包含多个集合(表)
- collection 集合,相当于SQL中的表(table),一个集合可以存放多个文档(行)。 不同之处就在于集合的结构(schema)是动态的,不需要预先声明一个严格的表结构。更重要的是,默认情况下 MongoDB 并不会对写入的数据做任何schema的校验。
- document 文档,相当于SQL中的行(row),一个文档由多个字段(列)组成,并采用bson(json)格式表示。
- field 字段,相当于SQL中的列(column),相比普通column的差别在于field的类型可以更加灵活,比如支持嵌套的文档、数组。
此外,MongoDB中字段的类型是固定的、区分大小写、并且文档中的字段也是有序的。 - _id 主键,MongoDB 默认使用一个_id 字段来保证文档的唯一性。
- reference 引用,勉强可以对应于 外键(foreign key) 的概念,之所以是勉强是因为 reference 并没有实现任何外键的约束,而只是由客户端(driver)自动进行关联查询、转换的一个特殊类型。
- view 视图,MongoDB 3.4 开始支持视图,和 SQL 的视图没有什么差异,视图是基于表/集合之上进行动态查询的一层对象,可以是虚拟的,也可以是物理的(物化视图)。
- index 索引,与SQL 的索引相同。
BSON 数据类型
MongoDB 文档可以使用 Javascript 对象表示,从格式上讲,是基于 JSON 的。JSON 有自己的短板,比如无法支持像日期这样的特定数据类型,因此 MongoDB 实际上使用的是一种扩展式的JSON,叫 BSON(Binary JSON)。BSON 所支持的数据类型包括:
Type | Number | Alias |
---|---|---|
32-bit integer | 16 | 整数 |
64-bit integer | 18 | 长整数 |
Double | 1 | 浮点数 |
Boolen | 8 | 布尔值 |
String | 2 | 字符串 |
Object | 3 | 对象 |
Array | 4 | 数组 |
Date | 9 | 日期 |
Binary data | 5 | 二进制数据 |
ObjectId | 7 | 文档ID |
Null | 10 | 空值 |
Timestamp | 17 | 时间戳 |
Decimal 128 | 19 | 高精度浮点数 |
Min key | -1 | 最小值 |
Max key | 127 | 最大值 |
二、安装及使用
1、Import the public key used by the package management system
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
2、Create a list file for MongoDB (Ubuntu 16.04)
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
3、Reload local package database
sudo apt-get update
4、Install the MongoDB packages
sudo apt-get install -y mongodb-org
安装完后,在/usr/bin/目录下有mongod和mongo两个可执行文件,mongod是服务器端,mongo是客户端。要启动mongodb服务,需要先开启mongod。
5、Start MongoDB
sudo service mongod start
如果报错:Failed to start mongod.service: Unit mongod.service not found.
sudo systemctl enable mongod
6、Verify that MongoDB has started successfully
sudo service mongod status
如果输出有Active: active (running),说明启动成功。通过输出还可以看到实际运行了/usr/bin/mongod --config /etc/mongod.conf ,从/etc/mongod.conf中可以看到存储路径dbPath: /var/lib/mongodb、日志路径path: /var/log/mongodb/mongod.log、端口port: 27017等。
7、Restart MongoDB
sudo service mongod restart
8、Begin using MongoDB
mongo
9、Stop MongoDB
sudo service mongod stop
10、Remove Packages
sudo apt-get purge mongodb-org*
11、Remove MongoDB databases and log files
sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
数据库位置:
locate mongodb.conf
/etc/mongodb.conf
/etc/init/mongodb.conf
cat /etc/mongod.conf
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
# where to write logging data.
systemLog:
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
cat /etc/hosts
127.0.0.1 localhost
shell 操作数据库
进入MongoDB shell
mongo
想知道mongodb支持哪些命令,可以直接输入help
help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
MongoDB Shell常用命令:
show dbs 列出所有DB
use dbname 切换当前DB
show tables 或 show collections 列出当前DB的所有表/集合
show users 列出当前DB的所有用户
show profile 列出当前DB的所有慢查询
show logs 列出运行日志
例子:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
alan_test 0.000GB
> use alan_test
switched to db alan_test
> db.createCollection("data")
{ "ok" : 1 }
> show tables
data
> db.data.find()
{ "id" : ObjectId("1234abcd"), "name" : "alan", "age" : NumberLong(18), "weight" : NumberLong(50), "habbit" : [ { "address" : [ "beijing/haidian" ]} ], "sister" : [ ], "first_id" : [ NumberLong(0) ], "is_good" : true}
> db.data.drop()
true
>
在Mongo集合中使用特殊字符
> db.hello-world.find()
2020-01-15T17:07:30.953+0800 E QUERY [js] uncaught exception: ReferenceError: world is not defined :
@(shell):1:1
> db.hello-world.drop()
2020-01-15T17:18:42.396+0800 E QUERY [js] uncaught exception: ReferenceError: world is not defined :
@(shell):1:1
对特殊字符正确转义处理:
db["hello-world"].find()
> db["hello-world"].drop()
true
三、robo 3T
robo 3T是mongodb的一个非常好用的可视化管理工具,曾经名叫robomongo,现被收购后改名为robo 3T。
到robomongo官网下载Linux版本(Download Your Double Pack=>Linux=>填写个人信息=>下载)
解压安装包:
tar -xvzf studio-3t-robo-3t-linux-double-pack.tar.gz
tar -xvzf robo3t-1.3.1-linux-x86_64-7419c406.tar.gz
移到/usr/local/bin目录下,并改名叫robomongo:
sudo mv robo3t-1.3.1-linux-x86_64-7419c406 /usr/local/bin/robomongo
在~/.bashrc添加别名:
alias robomongo="/usr/local/bin/robomongo/bin/robo3t"
source ~/.bashrc # 立即生效
以后打开终端,输入robomongo就可以启动robo 3T了。
在弹出的MongoDB Connections窗口,点击Create=>Save=>Connect。
可以看到GUI的内容和shell的输出对应。
注意:打开robo 3T前需要启动mongod服务,robo 3T才能链接到mongodb数据库。
参考:
Install MongoDB Community Edition on Ubuntu
Failed to start mongod.service: Unit mongod.service not found