一、安装
下载地址:https://www.mongodb.com/try/download/community
下载的包名为:mongodb-linux-x86_64-4.0.21.tgz
解压:
[root@master ~]# tar -zxf mongodb-linux-x86_64-4.0.21.tgz
创建运行MongoDB的普通用户:
[root@master ~]# useradd mongod
[root@master ~]# passwd mongod
创建需要的目录:
[root@master ~]# mkdir -p /usr/local/mongodb/{conf,data,log}
将解压出来的bin目录,移动到/usr/local/mongodb目录下:
[root@master ~]# mv mongodb-linux-x86_64-4.0.21/bin/ /usr/local/mongodb/
root@master ~]# ls /usr/local/mongodb/
bin conf data log
修改目录权限:
[root@master ~]# chown -R mongod:mongod /usr/local/mongodb/
设置环境变量:
[root@master ~]# vim /etc/profile.d/mongod.sh
export PATH=/usr/local/mongodb/bin:$PATH
[root@master ~]# source /etc/profile
二、配置文件
MongoDB的配置文件,遵循YAML格式:
[root@master ~]# vim /usr/local/mongodb/conf/mongodb.conf
# 日志相关
systemLog:
destination: file
logAppend: true
path: /usr/local/mongodb/log/mongodb.log
# 数据存储相关
storage:
dbPath: /usr/local/mongodb/data
journal:
enabled: true
# 进程控制
processManagement:
fork: true
pidFilePath: /usr/local/mongodb/data/mongodb.pid
timeZoneInfo: /usr/share/zoneinfo
# 网络配置相关
net:
port: 27017
bindIp: 0.0.0.0
官方推荐使用普通用户运行MongoDB,启动MongoDB:
[root@master ~]# su - mongod
[mongod@master ~]$ mongod -f /usr/local/mongodb/conf/mongodb.conf
停止MongoDB:
[mongod@master ~]$ mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown
三、使用systemd管理MongoDB
[root@master ~]# vim /usr/lib/systemd/system/mongod.service
[Unit]
Description=MongoDB 4.0.21
[Service]
User=mongod
Restart=on-failure
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
ExecStop=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target
使用systemd启动MongoDB:
[root@master ~]# systemctl daemon-reload #更新配置
[root@master ~]# systemctl enable mongod #开机自启动
[root@master ~]# systemctl start mongod #启动MongoDB
[root@master ~]# systemctl status mongod #查看MongoDB状态
四、基础操作
4.1、数据库相关
连接到MongoDB时,默认所在数据库是test,如果没有创建新的数据库,数据默认会存放在test数据库中。
4.1.1、查看所有数据库:
语法:show dbs
4.1.2、创建数据库:
语法:use DATABASE_NAME
示例,创建名称为“db01”的数据库:
use db01
当use到不存在的数据库时,数据库并不会真的被创建。只有当数据插入后,数据库才会真的被创建。
4.1.3、查看当前所在的数据库
语法:db
4.1.4、删除数据库
要删除数据库,需要先use
到该数据库下,再执行删除命令:
use db01
db.dropDatabase()
4.2、集合相关
集合类似于MSQL的表。
4.2.1、创建集合
集合并不需要预先创建,当往集合中插入文档时,集合会自动创建。
语法:db.createCollection("COLLECTION_NAME", {options})
options,可选参数:
- capped:可选。如果为true,则创建固定长度的集合。当集合达到最大值时,将会覆盖最早的文档;
- size:可选。为固定集合指定最大值,即字节数;
- max:可选。固定集合中可以包含的最大文档数量。
示例一,创建一个名称为“t1”的普通集合:
db.createCollection("t1")
示例二,创建一个名称为“t2”的固定长度集合:
db.createCollection("t2",{capped:true,size:4096,max:100})
4.2.2、查看当前库中的所有集合
语法:show collections
4.2.3、删除集合
语法:db.COLLECTION_NAME.drop()
示例,删除名称为“t2”的集合:
db.t2.drop()
4.3、文档相关
4.3.1、插入文档
语法:db.COLLECTION_NAME.insert([{key1:value1},{key2:value2},...])
示例一,往“t1”集合中插入单个文档:
db.t1.insert({"Name":"Tom","Age":"26","Sex":"man"})
示例二,往“t1”集合中插入多个文档:
db.t1.insert(
[
{"Name":"Lisa","Age":"20","Sex":"woman"},
{"Name":"Jim","Age":"29","Sex":"man"}
]
)
4.3.2、查看所有文档
语法:db.COLLECTION_NAME.find()
示例,查看“t1”集合中的所有文档:
db.t1.find().pretty()
pretty():格式化输出内容
4.3.3、更新文档
语法:db.COLLECTION_NAME.update(<query>,<update>,{options})
或db.COLLECTION_NAME.save(<document>)
options,可选参数:
- upsert:可选。默认值:false。如果要更新的文档不存在,为true时直接插入;为false时不插入;
- multi:可选。默认值:false,只更新找到的第一个文档;为true时,将更新所有符合条件的文档;
- writeConcern:可选。抛出异常的级别。
示例一,通过update()将“t1”集合中“Name”为“Lisa”的文档,“Age”改为“18”:
db.t1.update({"Name":"Lisa"},{$set:{"Age":"18"}})
示例二,通过save()传入新的文档,替换原来的文档,_id 主键存在就更新,不存在就插入:
db.t1.save({"_id":ObjectId("5fe2b9744a5f111567c54c28"),"Name":"Jim","Age":"29","Sex":"man"})
4.3.4、删除文档
语法:db.COLLECTION_NAME.remove(<query>,{options})
options,可选参数:
- justOne:可选。默认值为false,删除所有匹配的条件;为true时,只删除一个文档;
- writeConcern:可选。抛出异常的级别。
示例一,删除“t1”集合中“Age”为“29”的文档:
db.t1.remove({"Age":"29"},{justOne:true})
示例二,删除“t1”集合中所有文档:
db.t1.remove({})
4.4、AND条件
在使用find()方法查看文档时,可以指定多个用逗号隔开的键值对,用来查看满足所有条件的文档。类似于SQL中的AND
条件。
示例,查看“t1”集合中“Sex”为“man”并且“Age”为“29”的文档:
db.t1.find({"Sex":"man","Age":"29"})
4.5、OR条件
在使用find()方法查看文档时,通过使用$or
关键字实现。
示例,查看“t1”集合中“Sex”为“man”或“Age”为“18”的文档:
db.t1.find(
{
$or: [
{"Sex":"man"},
{"Age":"18"}
]
}
)
4.6、条件操作符
常用的条件操作符:
- $gt:大于
- $gte:大于等于
- $lt:小于
- $lte:小于等于
- $ne:不等于
示例一,查看“t1”集合中,“Age”大于等于“20”的文档:
db.t1.find({"Age":{$gt:"20"}})
示例二,查看“t1”集合中,“Age”大于等于“20”或者“Sex”为“man”的文档:
> db.t1.find(
{
"Age": {$gte: "20"},
$or: [
{"Sex": "man"}
]
}
)
4.7、排序
在使用find()方法时,可以同时使用sort()方法对结果排序。
语法:db.COLLECTION_NAME.find().sort({key:1})
- 1:按照升序排序;
- -1:按照降序排序。
示例,对“t1”集合按照“Age”降序排序:
db.t1.find().sort({"Age":-1})
4.8、查看指定数量的文档
在使用find()方法时,可以使用limit()方法查看指定数量的文档。
语法:db.COLLECTION_NAME.find().limit(NUM)
示例,查看“t1”集合中“Age”最大的文档:
db.t1.find().sort({"Age":-1}).limit(1)
同SQL中的limit一样,在MongoDB中使用limit()方法时,通过skip()方法在查看指定数量的文档时跳过指定数量的文档。
语法:db.COLLECTION_NAME.find().limit(NUM).skip(NUM)
示例:db.t1.find().sort({"Age":-1}).limit(1).skip(1)
4.9、索引
4.9.1、创建索引
语法:db.COLLECTION_NAME.createIndex({key:1})
- 1:将索引列升序排序创建索引;
- -1:将索引列降序排序创建索引。
示例,将“Age”作为索引列,创建索引:
db.t1.createIndex({"Age":1})
4.9.2、查看索引
语法:db.COLLECTION_NAME.getIndexes()
4.9.3、删除索引
语法:db.COLLECTION_NAME.dropIndex("INDEX_NAME")
注意,删除时使用的是索引的名称,而不是索引列。
五、用户管理
5.1、创建管理员用户
创建管理员用户时,必须在“admin”数据库下创建:
> use admin
> db.createUser(
{
user: "user1",
pwd: "123123",
roles: [
{
role: "root",
db: "admin",
bindIp:"0.0.0.0"
}
]
}
)
5.2、创建普通用户
在创建普通用户时,需要为普通用户指定用于认证的数据库。即需要先切换到该用户将要管理的普通数据库,再创建用户。
> use db01
switched to db db01
> db.createUser(
{
user: 'test1',
pwd: '123123',
roles: [
{
role: "readWrite",
db: "db01",
bindIp: "0.0.0.0"
}
]
}
)
5.3、开启认证功能
要使用用户管理,需要在配置文件中启用安全认证功能:
security:
authorization: enabled
5.4、用户登录
用户登录时,需要指定用户名、密码、以及用于认证的库。
管理员登录:
[mongod@master ~]$ mongo -u user1 -p123123 192.168.18.130/admin
普通用户登录:
[mongod@master ~]$ mongo -utest1 -p123123 192.168.18.130/db01
也可以先连接到MongoDB,再切换到认证库,使用db.auth()
进行认证。如,管理员登录时:
[mongod@master ~]$ mongo
> use admin
> db.auth("user1","123123")
5.5、删除用户
删除用户时,也需要先切换到用户的认证库,再执行删除命令。如删除普通用户“test1”:
> use db01
> db.dropUser("test1")