MongoDB

Table of Contents

1. 安装

推荐使用 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: 查看所有的 collections
  • db.${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 看起来要小。看 这里

5. Resource

First created: 2018-07-09 12:02:46
Last updated: 2023-01-02 Mon 13:00
Power by Emacs 29.0.91 (Org mode 9.6.6)