Mongodb基本操作

MongoDB的使用

mongod:

mongo 是启动MongoDB shell客户端的命令

mongod 是启动MongoDB数据库服务的命令,主要提供了三种启动方式:

1. 命令行方式直接启动

MongoDB默认的存储数据目录为/data/db(需要事先创建),默认端口27017,也可以修改成不同目录:

# 直接启动mongod,默认数据存储目在 /data/db
python@ubuntu:~$ sudo mongod

# 启动mongod,并指定数据存储目录(目录必须存在,且有读写权限)
python@ubuntu:~$ sudo mongod --dbpath=/xxxxx/xxxxx

2. 配置文件方式启动

启动时加上-f参数,并指向配置文件即可,默认配置文件为/etc/mongodb.cnf,也可以自行编写配置文件并指定。

# 启动mongod,并按指定配置文件执行
python@ubuntu:~$ sudo mongod -f /etc/mongodb.cnf

3. 守护进程方式启动

- 启动

MongoDB提供了一种后台程序方式启动的选择,只需要加上—fork参数即可。但是注意:如果用到了--fork参数,就必须启用--logpath参数来指定log文件,这是强制的。

python@ubuntu:~$ sudo mongod --logpath=/data/db/mongodb.log --fork

about to fork child process, waiting until server is ready for connections.
forked process: xxxxx
child process started successfully, parent exiting

- 关闭

如果使用--fork在后台运行mongdb服务,那么就要通过本机admin数据库向服务器发送shutdownServer()消息来关闭。

python@ubuntu:~$ mongo
MongoDB shell version: 3.2.8
connecting to: test

> use admin
switched to db admin

> db.shutdownServer()
server should be down...
2017-05-16T22:34:22.923+0800 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2017-05-16T22:34:22.923+0800 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2017-05-16T22:34:22.923+0800 I NETWORK  [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) failed failed 
>

3. 启用用户认证方式启动

如果之前未定义过用户,所以mongod将允许本地直接访问操作数据库将使用本地root权限,如果使用--auth参数启动,将启用MongoDB授权认证,即启用不同的用户对不同的数据库的操作权限。

也可以在配置文件mongod.conf中加入auth = true按第二种启动方式启动。

# 启动mongod,并启用用户认证
python@ubuntu:~$ sudo mongod --auth

# 启动mongo shell
python@ubuntu:~$ mongo
MongoDB shell version: 3.2.8
connecting to: test

# 1\. 切换admin数据库下
> use admin
switched to db admin

# 2\. 创建一个拥有root权限的超级用户,拥有所有数据库的所有权限
#      用户名:python,密码:chuanzhi,角色权限:root(最高权限)
> db.createUser({user : "python", pwd : "chuanzhi", roles : ["root"]})

Successfully added user: { "user" : "python", "roles" : [ "root" ] }

# 3\. 如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,可以不用认证权限并创建一个用户,但是当继续创建第二个用户时,会返回错误,若想继续创建用户则必须认证登录。
> db.createUser({user : "bigcat", pwd : "bigcat", roles : [{role : "read", db : "db_01"}, {role : "readWrite", db : "db_02"}]})
couldn't add user: not authorized on admin to execute command{ createUser: "bigcat", pwd: "xxx", roles: [ { role: "read", db: "db_01" }, { role: "readWrite", db: "db_02" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } } :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.createUser@src/mongo/shell/db.js:1267:15

# 4\. 认证登录到python用户(第一次创建的用户)
> db.auth("python","chuanzhi")
1
>
# 5\. 查看当前认证登录的用户信息
> show users
{
    "_id" : "admin.python",
    "user" : "python",
    "db" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

> 

# 6\. 认证登录成功,可以继续创建第二个用户
#      用户名:bigcat,密码:bigcat,角色权限:[对db_01 拥有读权限,对db_02拥有读/写权限]
> db.createUser({user : "bigcat", pwd : "bigcat", roles : [{role : "read", db : "db_01"}, {role : "readWrite", db : "db_02"}]})
Successfully added user: {
    "user" : "bigcat",
    "roles" : [
        {
            "role" : "read",
            "db" : "db_01"
        },
        {
            "role" : "readWrite",
            "db" : "db_02"
        }
    ]
}

# 7\. 查看当前数据库下所有的用户信息.
> db.system.users.find()
{ "_id" : "admin.python", "user" : "python", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "y/3yPLzhDKa7cJ3Zd/8DXg==", "storedKey" : "9XaUqiUteEtFAfof3k+HJjevqCA=", "serverKey" : "YjIoUPl7HTHQZuklSFXXYpZB/U4=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "admin.bigcat", "user" : "bigcat", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "ZcCaT057Gz0WODuSx70Ncg==", "storedKey" : "pNYyLMPisTcYuUHMdR46vndteIo=", "serverKey" : "IOzB2pyBRyCgKTNNSf1wljsVxms=" } }, "roles" : [ { "role" : "read", "db" : "db_01" }, { "role" : "readWrite", "db" : "db_02" } ] }

>
# 8\. 认证登录到 bigcat 用户
> db.auth("bigcat", "bigcat")
1
>
# 9\. 切换到 数据库db_01,读操作没有问题
> use db_01
switched to db db_01
> show collections
> 
# 10\. 切换到 数据库db_02,读操作没有问题
> use db_02
switched to db db_02
> show collections
> 
# 11\. 切换到 数据库db_03,读操作出现错误,bigcat用户在db_03数据库下没有相关权限
> use db_03
switched to db db_03
> show collections
2017-05-17T00:26:56.143+0800 E QUERY    [thread1] Error: listCollections failed: {
    "ok" : 0,
    "errmsg" : "not authorized on db_03 to execute command { listCollections: 1.0, filter: {} }",
    "code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:773:1
DB.prototype.getCollectionInfos@src/mongo/shell/db.js:785:19
DB.prototype.getCollectionNames@src/mongo/shell/db.js:796:16
shellHelper.show@src/mongo/shell/utils.js:754:9
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1

>
# 12\. 认证登录到python用户下
> db.auth("python", "chuanzhi")
1
>
# 13\. 删除bigcat用户
> db.dropUser("bigcat")
true
>
# 14\. 尝试认证登录bigcat失败
> db.auth("bigcat", "bigcat")
Error: Authentication failed.
0
>
# 15\. 退出mongo shell
> exit
bye
python@ubuntu:~$

参考阅读:[http://www.mongoing.com/docs/tutorial/enable-authentication.html)

mongod部分参数说明(了解):

dbpath:数据文件存放路径。每个数据库会在其中创建一个子目录,防止同一个实例多次运行的mongod.lock也保存在次目录中。

logpath:错误日志文件

auth:用户认证

logappend:错误日志采用追加模式(默认覆写模式)

bind_ip:对外服务的绑定ip,一般设置为空,及绑定在本机所有可用ip上。如有需要可以单独绑定。

port:对外服务端口。Web管理端口在这个port的基础上+1000。

fork:以后台Daemon形式运行服务。

journal:开启日志功能,通过保存操作日志来降低单机故障的恢复时间。

syncdelay:系统同步刷新磁盘的时间,单位为秒,默认时60秒。

directoryperdb:每个db存放在单独的目录中,建议设置该参数。

repairpath:执行repair时的临时目录。如果没有开启journal,异常down机后重启,必须执行repair操作。

在源代码中,mongod的参数分为一般参数,windows参数,replication参数,replica set参数以及隐含参数。上面列举的时一般参数。

mongod的参数中,没有设置内存大小的相关参数,因为MongoDB使用os mmap机制来缓存数据文件数据,自身目前不提供缓存机制。mmap在数据量不超过内存时效率很高,但是数据超过内存后,写入的性能不太稳定。

MongoDB 统计信息(了解)

要获得关于MongoDB的服务器统计,需要在MongoDB客户端键入命令db.stats()。这将显示数据库名称,收集和数据库中的文档信息。输出的命令如下所示

[图片上传失败...(image-f15d5-1513858189561)]

了解下一下各个参数

"db" : "test" ,表示当前是针对"test"这个数据库的描述。想要查看其他数据库,可以先运行$ use datbasename
"collections" : 3,表示当前数据库有多少个collections.可以通过运行show collections查看当前数据库具体有哪些collection.
"objects" : 267,表示当前数据库所有collection总共有多少行数据。显示的数据是一个估计值,并不是非常精确。
"avgObjSize" : 623.2322097378277,表示每行数据是大小,也是估计值,单位是bytes
"dataSize" : 16640,表示当前数据库所有数据的总大小,不是指占有磁盘大小。单位是bytes
"storageSize" : 110592,表示当前数据库占有磁盘大小,单位是bytes,因为mongodb有预分配空间机制,为了防止当有大量数据插入时对磁盘的压力,因此会事先多分配磁盘空间。
"numExtents" : 0,没有什么真实意义
"indexes" : 2 ,表示system.indexes表数据行数。
"indexSize" : 53248,表示索引占有磁盘大小。单位是bytes
"ok" : 1,表示服务器正常
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • mongodb需要先启动一个服务器进程(mongod命令),然后再启动客户端进程(mongo命令)。安装完成之后如...
    fooke阅读 581评论 0 0
  • 安装 配置环境 mongodb安装完毕后,默认安装路径在/usr/local/Cellar/mongodb/3.4...
    bd4d0d78f248阅读 5,726评论 0 53
  • 转:http://blog.csdn.net/wlzx120/article/details/52301812 -...
    suanmilk阅读 12,988评论 1 4
  • 创建数据库 打印数据库列表 ** MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放...
    陈小陌丿阅读 264评论 0 0
  • 系统相关 安装MongoDB 启动MongoDB服务器 连接MongoDB服务器,启动客户端 数据库相关 创建数据...
    DongGuangqing阅读 242评论 0 0