文章目录
MongoDB 是一个基于分布式文件存储的数据库,使用的数据类型 BSON(类似 JSON)。
1、安装
1.1 window平台安装MongoDB
下载地址:https://www.mongodb.com/try/download/community
下载,并安装。
在Service Configuration界面,各配置说明如下
Install MongoD as a service :可以将MongoDB 安装为服务(安装为服务可以使用Windows服务来进行自启动,更加方便,只有选择安装为服务才可以进行下面的配置)。
-
Run service as Network Service user :以网络服务用户身份运行服务(默认),这是 Windows 内置的 Windows 用户帐户
-
Run Service as a local or domain user: 即以本地或域用户身份运行服务
对于现有的本地用户帐户,为帐户域指定一个句点(即 .,上图即为该情况)并为用户指定帐户名称和帐户密码。
对于现有域用户,指定该用户的帐户域、帐户名称和帐户密码。 -
Service Name 即服务名称。指定服务名称。默认名称是 MongoDB。如果您已有具有指定名称的服务,则必须选择其他名称。
-
Data Directory 即数据目录。指定数据目录,对应
--dbpath
。如果目录不存在,安装程序将创建目录并将目录访问权限设置给服务用户。 -
Log Directory 即日志目录。指定Log目录,对应
--logpath
。如果目录不存在,安装程序将创建目录并将目录访问权限设置给服务用户。
MongoDB Compass是一个图形界面管理工具,如果你已经有Navicat之类的客户端工具了,就不用安装了,如下
1.2 Linux系统中安装启动和连接
准备好安装包,如下
(1)解压缩
tar -xvf mongodb-linux-x86_64-rhel70-5.0.23.tgz
(2)移动解压后的文件夹到指定目录
mv mongodb-linux-x86_64-rhel70-5.0.23 /usr/local/mongodb
(3)新建存储数据和日志目录
# 数据存储目录
mkdir -p /mongodb/single/data/db
# 日志存储目录
mkdir -p /mongodb/single/log
(4)新建配置文件
vi /mongodb/single/mongod.conf
内容如下:
systemLog:
# MongoDB发送所有日志输出的目标指定为文件
destination: file
# mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/mongodb/single/log/mongod.log"
# 当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend: true
storage:
# mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
# The directory where the mongod instance stores its data.Default Value is "/data/db".
dbPath: "/mongodb/single/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
net:
# 服务实例绑定的IP,默认是localhost(192.168.157.140:局域网IP)
bindIp: localhost,192.168.157.140
# bindIp
#绑定的端口,默认是27017
port: 27017
(5)启动MongoDB服务
/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf
注:如果启动后不是successfully,大概率是配置文件有问题。
通过进程查看是否启动
ps -ef | grep mongod
(6)防火墙设置
#开放端口27017
firewall-cmd --add-port=27017/tcp --permanent --zone=public
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
(7)停止关闭服务
方式一:粗暴简单
ps -ef | grep mongod
kill -2 xxx
方式二:通过mongo客户端的shutdownServer命令关闭
# 登录,如果远程,需认证
mongo --port 27017
# 切换到admin库
use admin
# 关闭服务
db.shutdownServer()
2、MongoDB连接
默认情况下,MongoDB的启动端口为27017。用Navicat连接如下所示
mongo命令连接如下
切换到bin目录下
./mongo --port 27017
3、MongoDB 概念
在mongodb中基本的概念是文档、集合、数据库,如下
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
数据库(DATABASE)
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
“show dbs” 命令可以显示所有数据的列表。
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
文档(Document)
文档是一个键值(key-value)对(即BSON)。
{"no":"123", "name":"456"}
集合
集合就是 MongoDB 文档组,类似于关系型数据库中的表。
{"no":"123", "name":"张三"}
{"no":"456", "name":"李四"}
{"no":"789", "name":"王五"}
元数据
数据库的信息是存储在集合中。它们使用了系统的命名空间:
dbname.system.*
在MongoDB数据库中名字空间 <dbname>.system.*
是包含多种系统信息的特殊集合(Collection),如下:
集合命名空间 | 描述 |
---|---|
dbname.system.namespaces | 列出所有名字空间。 |
dbname.system.indexes | 列出所有索引。 |
dbname.system.profile | 包含数据库概要(profile)信息。 |
dbname.system.users | 列出所有可访问数据库的用户。 |
dbname.local.sources | 包含复制对端(slave)的服务器信息和状态。 |
4、常用语法
创建数据库
语法:
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
删除数据库
语法:
db.dropDatabase()
删除当前数据库,你可以使用 db 命令查看当前数据库名。
创建集合
语法:
db.createCollection("mycol")
查看创建的集合
show collections
删除集合
语法:
db.mycol.drop()
文档CRUD
所有存储在集合中的数据都是BSON格式
-- 集合mycol
-- 单个文档插入
db.mycol.insert(
{"name":"yyy","sex":"1"}
)
-- 多个文档插入
db.mycol.insertMany(
[{"name":"333","sex":"1"},
{"name":"222","sex":"1","age":30}]
)
-- 异常捕获(批量插入出现异常不会回滚,所以使用try catch捕获异常)
try{
db.mycol.insertMany(
[{"name":"333","sex":"1"},
{"name":"222","sex":"1","age":30}]
)
}catch(e){
print(e)
}
-- 查询
db.mycol.find()
-- 查询某个
db.mycol.find({"name":"333"})
-- 只查询第一条
db.mycol.findOne({"name":"yyy"})
-- 投影查询(只查询某些字段,1不排除0排除)
db.mycol.find({"name":"yyy"},{name:1,_id:0})
更新文档
-- 覆盖修改,除了更新的字段其他都不见
db.mycol.update({_id:""},{sex:2})
-- 局部修改,利用修改器$set实现
db.mycol.update({_id:""},{$set:{sex:2}})
-- 批量修改(默认只修改第一条,加上参数multi即可)
db.mycol.update({name:"333"},{$set:{sex:"2"}},{multi:true})
删除文档
-- 全部删除,慎用
db.mycol.remove({})
-- 删除符合条件的
db.mycol.remove({name:"222"})
5、数据备份还原
备份数据库
# 语法
mongodump -h dbhost -d dbname -c cname -o dbdirectory
# 说明:
# dbhost:服务器地址
# dbname:数据库名字
# cname:集合名字,不用此参数导出整个库
# dbdirectory:备份数据存放目录
# 示例
./mongodump -h localhost:27017 -d d_test -o /data/bak
还原数据库
# 语法
mongorestore -h dbhost -d dbname -c cname dbdirectory
# 说明:
# dbhost:服务器地址
# dbname:数据库名字
# cname:集合名字
# dbdirectory:备份数据存放目录
# 示例
./mongorestore -h localhost:27017 -d d_test /data/bak/d_test
./mongorestore -h localhost:27017 -d EDU_ROBOT /data/bak/EDU_ROBOT
注:新版本已经没有mongodump和mongorestore命令,被进行了功能拆分,如需使用还需单独下载。
https://www.mongodb.com/try/download/database-tools
下载后同样进行解压,切换到bin目录即可
删除数据库,还原,如下
更多技术干货,请持续关注程序员大佬超。
原创不易,转载请注明出处。