MongoDB 第10章 MongoDB shell之系统命令、用户命令

举报
许小强 发表于 2022/03/18 17:01:26 2022/03/18
【摘要】 命令

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()等等。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。