MongoDB

mongodb执行系统命令 第九章MongoDB shell之系统命令、用户命令

1、命令操作

MongoDB Shell不仅仅是一个交互式的shell,它页支持执行指定JavaScript文件,也支持执行指定的命令片段,有了这个特性,就可以将MongoDB与Linux shell完美结合,完成大部分的日常管理和维护工作。Shell命令其实控制台底层的查询语句都是用JavaScript脚本完成的。

系统相关

1.1、help查看命令

[root@localhost bin]# ./mongo
MongoDB shell version: 2.6.6
connecting to: test
> help
        db.help()                    help on db methods #数据库支持方法帮助查看
        db.mycoll.help()             help on collection methods #集合支持方法帮助查看
        sh.help()                    sharding helpers #分片帮助查看
        rs.help()                    replica set helpers #复制集合帮助查看
        help admin                   administrative help #管理员帮助
        help connect                 connecting to a db help # 连接数据库帮助
        help keys                    key shortcuts # 快捷键帮助
        help misc                    misc things to know #
        help mr                      mapreduce # mapreduce 帮助
        show dbs                     show database names # 显示数据库名列表
        show collections             show collections in current database #显示当前数据库中所有集合
        show users                   show users in current database # 显示当前数据库的所有用户
        show profile                 show most recent system.profile entries with time >= 1ms # 显示当前系统时间大于1ms的最新条目
        show logs                    show the accessible logger names #显示访问日志
        show log [name]              prints out the last segment of log in memory, 'global' is default #打印出最近日志片段,默认为global
        use <db_name>                set current database #选择某个数据库
        db.foo.find()                list objects in collection foo #查看foo集合中所有的对象
        db.foo.find( { a : 1 } )     list objects in foo where a == 1 #查看foo集合中a字段value=1的所有对象
        it                           result of the last line evaluated; use to further iterate #从当前迭代出结果中最后一个迭代更多的结果。
        DBQuery.shellBatchSize = x   set default number of items to display on shell #设置现在shell中的默认条目数
        exit                         quit the mongo shell #退出

1.2、查看数据库

> show dbs;
admin  0.078GB
local  0.078GB
test   0.078GB

1.3、切换数据库

> use zhangsan
switched to db zhangsan

若数据库之前不存在,当创建一个集合的时候会自动创建当前数据库。

1.4、删除当前使用数据库

> db.users.insert({name:"zhangsan"});
WriteResult({ "nInserted" : 1 })
> db.users.find();
{ "_id" : ObjectId("54a8f0812238f6a8a4053d91"), "name" : "zhangsan" }
> show dbs
admin     0.078GB
local     0.078GB
test      0.078GB
zhangsan  0.078GB
> db.dropDatabase();
{ "dropped" : "zhangsan", "ok" : 1 }
> show dbs
admin  0.078GB
local  0.078GB
test   0.078GB

1.5、克隆数据库

> db.cloneDatabase("127.0.0.1");
{ "clonedColls" : [ ], "ok" : 1 }
> show dbs
admin     0.078GB
local     0.078GB
test      0.078GB
zhangsan  (empty)

将指定机器上的数据库的数据克隆到当前数据库。

1.6、从指定的机器上复制指定数据库数据到某个数据库。

> db.copyDatabase("test","temp","127.0.0.1");
{ "ok" : 1 }
> db.show
zhangsan.show
> show dbs
admin     0.078GB
local     0.078GB
temp      0.078GB
test      0.078GB
zhangsan  (empty)
> use temp
switched to db temp
> show collections
c1
c2
c3
c4
fs.chunks
fs.files
students
students_res
system.indexes
system.js
user
xuz

1.7、修复当前数据库

> db.repairDatabase();
{ "ok" : 1 }

查看当前使用的数据库

> db
temp

> db.getName();
temp

db和getName方法是一样的效果,都可以查询当前使用的数据库。

1.8、显示当前数据库状态

> db.stats();
{
        "db" : "temp", 
        "collections" : 13,
        "objects" : 131,
        "avgObjSize" : 68.51908396946565,
        "dataSize" : 8976, 
        "storageSize" : 106496,
        "numExtents" : 13, 
        "indexes" : 13,
        "indexSize" : 106288, 
        "fileSize" : 67108864,
        "nsSizeMB" : 16,
        "dataFileVersion" : {
                "major" : 4,
                "minor" : 5
        },
        "extentFreeList" : {
                "num" : 0,
                "totalSize" : 0
        },
        "ok" : 1
}

1.9、当前数据库版本

> db.version();
2.6.6

1.10、查看当前数据库连接机器的地址

> db.getMongo();
connection to 127.0.0.1

集合相关

1.11、创建一个集合(Collection)

> db.createCollection("users",{size:20,capped:5,max:100});
{ "ok" : 1 }
> show collections
c1
c2
c3
c4
fs.chunks
fs.files
students
students_res
system.indexes
system.js
user
users
xuz

1.12、获取指定名称的集合(Collection)

> db.getCollection("users");
temp.users

1.13、得到当前db的所有集合(Collection)

> db.getCollectionNames();
[
        "c1",
        "c2",
        "c3",
        "c4",
        "fs.chunks",
        "fs.files",
        "students",
        "students_res",
        "system.indexes",
        "system.js",
        "user",
        "users",
        "xuz"
]

1.14、显示当前db所有集合的索引状态

> db.printCollectionStats();
startup_log
{
        "ns" : "local.startup_log",
        "count" : 6,
        "size" : 6144,
        "avgObjSize" : 1024,
        "storageSize" : 10485760,
        "numExtents" : 1,
        "nindexes" : 1,
        "lastExtentSize" : 10485760,
        "paddingFactor" : 1,
        "systemFlags" : 1,
        "userFlags" : 0,
        "totalIndexSize" : 8176,
        "indexSizes" : {
                "_id_" : 8176
        },
        "capped" : true,
        "max" : NumberLong("9223372036854775807"),
        "ok" : 1
}
---
system.indexes
{
        "ns" : "local.system.indexes",
        "count" : 1,
        "size" : 112,
        "avgObjSize" : 112,
        "storageSize" : 8192,
        "numExtents" : 1,
        "nindexes" : 0,
        "lastExtentSize" : 8192,
        "paddingFactor" : 1,
        "systemFlags" : 0,
        "userFlags" : 1,
        "totalIndexSize" : 0,
        "indexSizes" : {

        },
        "ok" : 1
}
---

用户相关

1.15、添加一个用户

说明:随着版本的更新,对在使用mongodb的业务也进行版本升级,之前创建用户的命令db.addUser()已经被废弃,且会提示警告,如下所示:

> db.addUser("test1","1111");
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
2015-01-04T16:15:37.911+0800 Error: couldn't add user: Cannot create users in the local database at src/mongo/shell/db.js:1004

官网上给出了最新创建用户的方法如下:

{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}
参数说明:

user:用户名称。

pwd:用户密码。

customData:当前用户信息,如描述或者其他任意信息。

roles:当前用户角色。

MongoDB 2.6版本提供了自带的role,也可以根据需要创建新的role,赋予一个用户,具体参考后面的role的创建。

> db.createUser({user:"test2",pwd:"1234",roles:[{role:"dbOwner",db:"temp"}]});
Successfully added user: {
        "user" : "test2",
        "roles" : [
                {
                        "role" : "dbOwner", #角色名称 系统默认
                        "db" : "temp" #所属数据库
                }
        ]
}

1.15、查看当前数据库所有用户

> show users
{
        "_id" : "temp.test2",
        "user" : "test2",
        "db" : "temp",
        "roles" : [
                {
                        "role" : "dbOwner",
                        "db" : "temp"
                }
        ]
}

1、16、获取具体某个用户

> db.getUser("test2");
{
        "_id" : "temp.test2",
        "user" : "test2",
        "db" : "temp",
        "roles" : [
                {
                        "role" : "dbOwner",
                        "db" : "temp"
                }
        ]
}

1.17、获取所有用户

> db.getUsers();
[
        {
                "_id" : "temp.test2",
                "user" : "test2",
                "db" : "temp",
                "roles" : [
                        {
                                "role" : "dbOwner",
                                "db" : "temp"
                        }
                ]
        }
]

1.18、修改用户密码

> db.changeUserPassword("test2","22222222");

1.19、删除单个用户

> db.dropUser("test2");
true

1.20、删除所有用户

> db.dropAllUsers();
0

返回删除用户的数量。

用户相关命令还有很多,在后面的文章列出,如updateUser()、grantRolesToUsers()、removeUser()等等。

--------------------------------MongoDB系列文章更新------------------------------------------------

第一部分 基础篇 第一章 走进MongoDB

第一部分 基础篇 第二章 安装MongoDB

第一部分 基础篇 第三章 MongoDB体系结构

第一部分 基础篇 第四章 MongoDB快速入门

第一部分 基础篇 第四章 MongoDB查询

第二部分 应用篇 第五章 MongoDB高级查询

第二部分 应用篇 第六章 MongoDB GridFS

第二部分 应用篇 第七章 MongoDB MapReduce

第三部分 管理篇 第八章 MongoDB服务管理