安装

1. 方法一(不推荐)

1
vi /etc/yum.repos.d/mongodb.repo

写入

1
2
3
4
5
[mongodb-org]
name=MongoDB Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mongodb/yum/el$releasever/
gpgcheck=0
enabled=1

保存

1
2
sudo yum makecache
sudo yum install mongodb-org

将mongoDB添加到systemd

1
vim /usr/lib/systemd/system/mongod.service
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=mongodb database

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=--quiet -f /etc/mongod.conf"
ExecStart=/usr/bin/mongod $OPTIONS run
PIDFile=/var/run/mongodb/mongod.pid

[Install]
WantedBy=multi-user.target

建立链接

1
ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/

重新加载systemctl

1
systemctl daemon-reload

2. 方法二(推荐)

###1. 安装

1
2
3
4
5
6
# 下载
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
# 解压
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
# 将解压包拷贝到指定目录
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到 PATH 路径中:

1
export PATH=/usr/local/mongodb/bin:$PATH

直接执行此命令,只会创建出临时的环境变量,即重新断开连接服务器后会失效;

环境变量持久化配置:需要将mongod路径添加到系统路径中,
/etc/profile 文件中,添加

1
export PATH=/usr/local/mongodb/bin:$PATH;

执行 source /etc/profile使系统环境变量立即生效

2.启动配置

  1. 创建数据库存放和日志目录
    /usr/local/mongodb/data/db
    /usr/local/mongodb/log
  2. 配置mongod启动文件
    /usr/local/mongodb/etc下创建配置文件mongod.conf:
    1
    2
    3
    4
    5
    6
    dbpath=/usr/local/mongodb/data   # 数据库存放位置(之前创建的)
    logpath=/usr/local/mongodb/log/mongo.log # 数据库日志存放位置(之前创建的)
    port=27017
    fork=true #后台运行
    auth=false # 初次配置先关了权限验证登陆模式
    journal=false

    3.启动

1
2
3
4
cd /usr/local/mongodb/bin
mongod -f /usr/local/mongodb/etc/mongo.conf
#关闭
mongod -f /usr/local/mongodb/etc/mongo.conf -shutdown

4.设置用户

进入数据库管理命令界面:mongo

1
2
3
4
5
use admin
db.createUser({user:'admin',pwd:'password',roles:[{role:'root','db':'admin'}]})
use dbname
db.createUser({user:'dbname',pwd:'password',roles:[{role:'readWrite',db:'dbname'}]})

  • 常用的role值记录:
  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
  7. 内部角色:__system
  • 相应的功能
  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

还把配置文件auth改为true

6.远程连接

1
2
3
4
5
mongo IP:27017/admin -u useradmin -p password

mongo IP:27017
use dbname
db.auth('username','password')即可

备份与恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
* 备份
mongodump -h dbhost -d dbname -o dbdirectory
mongodump -h ip:27017 -u admin -p password -d database -o path
-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:
需要备份的数据库实例,例如:test

-o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
* 恢复

mongorestore -h ip:port -d dbname 路径


mongorestore -h <hostname><:port> -d dbname <path>


--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017

--db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

<path>:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。

你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。

--dir:
指定备份的目录

你不能同时指定 <path> 和 --dir 选项。

5. 卸载

1
2
3
4
5
sudo yum erase $(rpm -qa | grep mongodb-org)   # 卸载

sudo rm -r /var/log/mongodb # 删除日志文件

sudo rm -r /var/lib/mongo # 删除数据

6.操作

查重

1
2
3
4
5
6
7
8
db.getCollection('表').aggregate([
{
$group:{_id:{'字段':'$字段'}, count:{$sum:1}}
},
{
$match:{count:{$gt:1}}
}
])

按netid进行查重
去处

1
2
3
4
5
6
7
8
9
10
11
12
13
db.getCollection('表').aggregate([
{
$group: { _id: {字段: '$字段'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
},
{
$match: {count: {$gt: 1}}
}
]).forEach(function(doc){
doc.dups.shift();
db.表.remove({_id: {$in: doc.dups}});
})

去处指定字段