MongoDB
Table of Contents
1. 安装
- 设置清华大学提供的镜像源:https://mirror.tuna.tsinghua.edu.cn/help/mongodb/,然后通过包管理工具(yum、apt 等)安装
- 也可以使用 Docker 的方式启动,这里
推荐使用 Docker,挂载存储到本地。
2. 常用命令
2.1. 库级别命令
user ${db}: 切换数据库show dbs: 查看所有数据库show users: 显示用户db.dropDatabase(): 删除当前数据库db.getName(): 查看当前数据库(名称)db.version(): 查看当前 DB 版本db.stats(): 查看库表状态(表、对象数量,对象大小,数据大小,存储大小,索引数量,索引大小等),默认的单位是 byte,可以指定参数。如db.stats(1024)则返回的是 KB。
2.2. 表级别命令
show collections: 查看所有的 collectionsdb.${collection}.stat(): 查看当前表的状态(大小、数量、索引等)db.${collection}.count(): 表行数量db.${collection}.find(): 不设置条件时,查询所有的数据,查询条件为JSON 结构,调用limit函数可限制记录条数db.${collection}.getIndexes(): 查看当前表的所有索引db.${collection}.dropIndex("${idx_name}"): 删除索引,dropIndexes()删除所有索引db.${collection}.distinct(field, query, options): 字段去重,具体请看 db.collection.distinct()
2.3. 其它
help: 万能的帮助命令,可针对库,表等分别调用,用好了基本上不需要查阅手册pretty(): 友好的显示结果,可与各种查询命令一起使用
3. 备份与恢复
MongoDB 中常使用 mongodump 来备份数据,使用 mongorestore 来恢复数据。
- mongodump:
mongodump -h <hostname><:port> -d dbname -o dbdirectory - mongorestore:
mongorestore -h <hostname><:port> -d dbname <path>
注意: 这两个命令特别坑的地方在于,如果不指定路径会自动选择当前目录下文件,一般命令不加任何参数会自动提示 help ,而这两个命令不会。
所以备份和恢复两个命令一定不能搞混了,有一次我备份数据的时候使用了 mongorestore 导致旧的数据恢复了。
mongorestore 报错:
error connecting to host: could not connect to server: connection() : auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed.=
加上 --authenticationDatabase=admin 就可以了,具体原因还未知。
较新版本的 MongoDB 需要指定 URI 连接,比如 mongorestore "mongodb://<username>:<passwd>@localhost:27017/<dbname>" --authenticationDatabase=admin --db <dbname> <path> 。
4. FAQ
4.1. Q: 如何查询嵌套内容?
A: 使用 . 语法,比如 db.xxx.find({"aa.bb": "cc"}) 将会查询 xxx 表中 aa 结构中的 bb = cc 的条目。
4.2. Q: db.stats() 中 dataSize 为什么比 storageSize 要大?
A: storageSize 是实际数据库所有占用大小的总和,不做压缩的情况下,要比 dataSize 要大,因为它还包含未使用的空间。但是如果你使用 WiredTiger 存储引擎,数据在磁盘是上压缩过的,所以比 dataSize 看起来要小。看 这里。