mongo基础–mongo连接、mongo多实例启动、mongo用户管理和用户角色、mongo库管理、mongo集合操作、mongo数据管理 – 21运维
通知: .-...

mongo基础–mongo连接、mongo多实例启动、mongo用户管理和用户角色、mongo库管理、mongo集合操作、mongo数据管理

mongodb 21运维 346浏览

记录一些常用的mongo基础操作。
1,mongo连接
默认安装以后,直接输入mongo 回车就可以了。 如果是连接本机非默认端口,或者是连接其他主机的mongo,那么就需要加参数了。 可以通过

mongo --help

查看帮助。
这里只记录两个:

--host 和--port

如果连接本机之外的其他机器:

mongo --host 10.1.14.93

如果连接本机之外的其他机器且端口并非默认的27017,而是27018,则需要:

mongo --host 10.1.14.93 --port 27018

2,mongo多实例启动
默认安装以后,有一个mongod的服务。 实际生产中,我们可能需要搞多个实例或者多个端口出来,直接通过自带服务来控制比较麻烦。
那么多实例和redis多实例差不多,就是通过 mongod -f /xxx/xxx/xxx.conf方式。 每个xxx.conf可以配置自己的实例信息,如log、datadir、副本集、端口和host等等。

[[email protected]]$ ps aux | grep mongo
worker   1244  0.1  0.2 846452 84220 ?        Sl   Apr11 459:42 /home/worker/mongodb3.0/bin/mongod -f /home/worker/mongodb3.0/conf/mongod-test1-27611.cnf
worker   1245  2.1 19.6 7745924 6367204 ?     Sl   Apr11 680:18 /home/worker/mongodb3.0/bin/mongod -f /home/worker/mongodb3.0/conf/mongod-test2-28111.cnf
worker   1246  0.2  0.3 898780 103052 ?       Sl   Apr11 699:12 /home/worker/mongodb3.0/bin/mongod -f /home/worker/mongodb3.0/conf/mongod-test3-38017.cnf
worker   1247  7.0  5.7 2701880 1864752 ?     Sl   Apr11 21:10 /home/worker/mongodb3.0/bin/mongod -f /home/worker/mongodb3.0/conf/mongod-test4-58017.cnf
worker   1248  0.3  0.5 1009580 180808 ?      Sl   Apr11 12:28 /home/worker/mongodb3.0/bin/mongod -f /home/worker/mongodb3.0/conf/mongod-test5-27711.cnf
worker   1249  6.4 10.4 5521480 3374432 ?     Sl   Apr11 26:32 /home/worker/mongodb3.0/bin/mongod -f /home/worker/mongodb3.0/conf/mongod-test6-48110.cnf
worker   17293  0.0  0.0 103244   860 pts/0    S+   20:56   0:00 grep mongo
[[email protected]]$ cat /home/worker/mongodb3.0/conf/mongod-test4-58017.cnf
systemLog:
    destination: file
    path: "/home/worker/data/mongod-test4-58017/mongod.log"
    logAppend: true
    quiet: true
storage:
    dbPath: "/home/worker/data/mongod-test4/"
    engine: "wiredTiger"
    journal:
        enabled: true
    wiredTiger:
        engineConfig:
            cacheSizeGB: 1 
processManagement:
    fork: false
    pidFilePath: "/home/worker/data/mongod-test4-58017/mongod.pid"
net:
    port: 58017 
    http: 
        RESTInterfaceEnabled: false
replication:
    oplogSizeMB: 20480
    replSetName: test4

3,mongo用户管理和用户角色

use admin//切换到admin库
db.createUser( { user: "21yunwei", customData: {description: "superuser"}, pwd: "123456", roles: [ { role: "root", db: "admin" } ] } )
user指定用户,customData为说明字段,可以省略,pwd为密码,roles指定用户的角色,db指定库名 
db.system.users.find()  //列出所有用户,需要切换到admin库
show users  //查看当前库下所有的用户
db.dropUser('admin') //删除用户
若要用户生效,还需要编辑启动脚本vim /usr/lib/systemd/system/mongod.service,在OPTIONS=后面增--auth
重启服务systemctl restart mongod
mongo -u "21yunwei" -p "123456" --authenticationDatabase "admin"
说明:仅公司内网代码调用,可以忽略用户设置。具体根据生产环境要求来定。

补充用户权限控制:

 use db1
 db.createUser( { user: "test1", pwd: "123456", roles: [ { role: "readWrite", db: "db1" }, {role: "read", db: "db2" } ] } )
 test1用户对db1库读写,对db2库只读。
 之所以先use db1,表示用户在 db1 库中创建,就一定要db1库验证身份,即用户的信息跟随随数据库。比如上述 test1虽然有 db2 库的读取权限,但是一定要先在db1库进行身份验证,直接访问会提示验证失败。
 use db2
 db.auth("test1", "123456")

用户角色说明:

 Read:允许用户读取指定数据库
 readWrite:允许用户读写指定数据库
 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
 userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
 clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
 root:只在admin数据库中可用。超级账号,超级权限

4,mongo库管理

 db.version()  //查看版本
 use userdb  //如果库存在就切换,不存在就创建
 show dbs    //查看库。 特殊场景:有些空库不会出现,原因空库没有任何集合,只需要创建一个集合就能看到了 
 db.createCollection('clo1') //创建集合clo1,在当前库下面创建
 db.dropDatabase() //删除当前库,要想删除某个库,必须切换到那个库下
 db.stats()  //查看当前库的信息
 db.serverStatus()   //查看mongodb服务器的状态

5,mongo集合

use dbname  //use要创建集合的那个库
db.createCollection('test') //创建集合test,在当前库下面创建
show tables  //列出当前库下有几个集合,也可以使用show collections。一般使用show tables,方便

6,mongo数据管理

 show tables //查看集合, 也可以用show collections
 db.Account.insert({AccountID:1,UserName:"21yunwei",password:"123456"})  //如果集合不存在,直接插入数据,则mongodb会自动创建集合
 db.Account.update({AccountID:1},{"$set":{"UserName":"yunwei21"}}) //更新
 db.Account.find()   //查看所有文档
 db.Account.find({AccountID:1})    //根据条件查询
 db.Account.remove({AccountID:1})  //根据条件删除
 db.Account.drop()  //删除所有文档,即删除集合
 use dbname   //先进入对应的库
 db.printCollectionStats()  // 然后查看集合状态

转载请注明:21运维 » mongo基础–mongo连接、mongo多实例启动、mongo用户管理和用户角色、mongo库管理、mongo集合操作、mongo数据管理