CentOS7系统安装MongoDB及基础操作

一、安装

下载地址: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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值