MongoDB常用命令

数据库连接

开启远程访问:修改配置文件 /etc/mongod.confbindIp: 127.0.0.1bindIp: 0.0.0.0
连接数据库:mongo 数据库地址:端口/数据库名 -u用户名 -p密码

数据导入导出

导入数据库文件到集合:mongoimport -d 数据库名 -c 集合名 数据库文件
导出数据库到文件:mongoexport -d 数据库名 -c 集合名 -o 文件名 --type 类型(默认json) -f 字段名(仅csv)

数据库操作

查看数据库列表:show dbs
查看当前所在数据库:dbdb.getName()
查看当前数据库状态:db.stats()
创建数据库/切换数据库:use 数据库名
删除当前数据库:db.dropDatebase()
修复当前数据库:db.repairDatabase()
查看当前用户:show users

集合操作

查看当前数据库集合:db.getCollectionNames()show collections
创建集合:db.createCollection("集合名", 选项)
选项 可以是如下参数:

字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值(以字节计)。 如果 capped 为 true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。

删除集合:db.集合名.drop()
统计集合数据条数:db.集合名.count
插入数据:db.集合名.insert({"字段1":"值", "字段2":"值"})
for(var i=1; i<=100; i++) db.集合名.insert({"字段1":i,"字段2":"值"}) //循环插入100条数据
删除数据:db.集合名.remove({"字段1":"值", "字段2":"值"}) //不加参数为清空当前集合
更新数据:db.集合名.update({"字段1":"值", "字段2":"值"})db.集合名.save({"字段1":"值", "字段2":"值"})
查询数据:db.集合名.find() //所有数据
db.集合名.find({"字段1": {$gte:10,$lte:30}}) //区间10-30(小于lt,大于gt,小于等于lte,大于等于gte)
db.集合名.find({"字段1":"值", "字段2":"值"}) //指定数据
db.集合名.find({"字段1":"值", "字段2":"值"}) //指定数据
db.集合名.find().sort({"字段1":1}) //数据按字段升序排列
db.集合名.find().sort({"字段1":-1}) //数据按字段降序排列
db.集合名.find().limit(30) //指定查询数据条数
db.集合名.find().skip(2) //指定从第n条开始查询
db.集合名.find({},{"字段1":1,"字段2":1}) //指定显示字段(1为显示,0为不显示)

用户管理

修改/etc/mongod.conf文件如下开启认证:

security:
  authorization: enabled

然后重启MongoDB服务器:service mongod restart

3.0版本以前

在mongodb3.0版本以前中,有一个admin数据库, 牵涉到服务器配置层面的操作,需要先切换到admin数据库,即 use admin , 相当于进入超级用户管理模式,mongo的用户是以数据库为单位来建立的, 每个数据库有自己的管理员.我们在设置用户时,需要先在admin数据库下建立管理员---这个管理员登陆后,相当于超级管理员

命令:db.addUser();
简单参数: db.addUser(用户名,密码,是否只读)

注意: 添加用户后,我们再次退出并登陆,发现依然可以直接读数据库,原因是 mongodb服务器启动时, 默认不是需要认证的,要让用户生效需要启动服务器时就指定--auth选项。

# 添加用户
> use admin
> db.addUser('admin','admin',false); # 3.0版本更改为createUser();

# 删除用户
> use test
> db.removeUser(用户名); # 3.0版本更改为dropUser();

3.0版本以后

创建管理员

在3.0版本以后,mongodb默认是没有admin这个数据库的,并且创建管理员不再用addUser,而用createUser;

语法说明
{ user: "<name>",  
  pwd: "<cleartext password>",
  customData: { <any information> }, # 任意的数据,一般是用于描述用户管理员的信息
  roles: [
    { role: "<role>", db: "<database>" } | "<role>", # 如果是role就是直接指定了角色,并作用于当前的数据库
    ...
  ] # roles是必传项,但是可以指定空数组,为空就是不指定任何权限
}

Built-In Roles(内置角色):

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
    这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system
    PS:关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。

操作示例:

#创建数据库aaa同时创建用户aaa并作用于当前数据库
use aaa
db.createUser({"user":"aaa","pwd":"000000","roles":["readWrite"]})

官方Example

use products # mongoDB的权限设置是以库为单位的,必选要先选择库
db.createUser( 
{ "user" : "accountAdmin01", 
 "pwd": "cleartext password",
 "customData" : { employeeId: 12345 },
 "roles" : [ { role: "clusterAdmin", db: "admin" }, 
             { role: "readAnyDatabase", db: "admin" },
             "readWrite" 
             ] },
{ w: "majority" , wtimeout: 5000 } ) # readWrite 适用于products库,clusterAdmin与readAnyDatabase角色适用于admin库

writeConcern文档(官方说明

  • w选项:允许的值分别是 1、0、大于1的值、"majority"、;
  • j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
  • wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。
use shop;
db.createUser({
    user:'admin',
    pwd:'zhouzhou123',
    roles:['dbOwner']
})

注:只要新加了一个用户,admin数据库就会重新存在;

mongo --host xxx -u admin -p zhouzhou123 --authenticationDatabase shop # 用新创建的用户登录

# 查看当前用户在shop数据库的权限
use shop;
db.runCommand(
  {
    usersInfo:"shopzhouzhou",
    showPrivileges:true
  }
)

# 查看用户信息
db.runCommand({usersInfo:"userName"})

# 创建一个不受访问限制的超级用户
use admin
db.createUser(
  {
    user:"superuser",
    pwd:"pwd",
    roles:["root"]
  }
)
认证用户
> use test
> db.auth(用户名,密码); #注意是以库为单位,必须先选择库;
删除用户
# 删除用户
> use test
> db.dropUser('用户名');
修改用户密码
> use test
> db.changeUserPassword(用户名, 新密码);

# 修改密码和用户信息
db.runCommand(
  {
    updateUser:"username",
    pwd:"xxx",
    customData:{title:"xxx"}
  }
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容