我在生产中使用MongoDB多年。在这个时候,我尝试了不同的工具和开发方法; 一些证明对我们有用,有些则没有。在这篇文章中,我喜欢分享方便的CLI工具,用于处理MongoDB,基于Docker的本地开发方法和有用的Mongo shell代码片段。

MongoDB:有用的开发工具和代码片段

TL; DR

  • CLI工具:
  • Docker化开发设置由Docker-Compose提供支持
    • 容器1:MongoDB
    • 容器2:Mongo-Express可以在浏览器中快速查看和编辑数据
    • 容器3:播种脚本以使用随机虚拟数据初始化MongoDB。
  • 有用的Mongo shell命令:
    • 按ID获取文档: db.products.find("5cc57fc685e5849abe2266c7")
    • 指数大小: db.products.stats()
    • 索引用法: db.products.aggregate([{ $indexStats: {} }], { cursor: {} })
  • MongoDB桌面客户端

使用Mongo-Hacker进行Mongo Shell增强功能

我强烈建议安装Mongo-Hacker。它默认为语法着色和格式化提供了Mongo Shell的简洁增强功能(无需再添加.pretty())。还有更多要发现的东西; 只需查看文档。

使用Mongo-Hacker进行语法着色,格式化和计时。
使用Mongo-Hacker进行语法着色,格式化和计时。

fzf-Powered Shell历史搜索

fzf是一个非常棒的命令行工具,用于模糊搜索文件和文件夹之类的东西。但对我来说,fzf最强大的功能是将模糊搜索应用于shell历史(通过键绑定)。说到MongoDB,我使用模糊历史搜索来快速找到mongo连接到某个数据库所需的连接线。只需点击Ctrl-R并输入“mongo databaseName / username / appName”即可。

使用fzf进行历史搜索可以快速找到所需的mongo连接命令
使用fzf进行历史搜索可以快速找到所需的mongo连接命令

不用说,在shell历史文件中使用密码时应该加密磁盘。

Mongo-Express,一个MongoDB Web客户端

Mongo-Express是MongoDB的一个有用的Web客户端。这不是一种美,但有助于快速查看某些文档并更改它们,而无需在专用客户端中配置连接。我喜欢在本地开发期间使用它,我在使用Docker-Compose的MongoDB容器旁边启动它。有关详细信息,请查看下一节

Mongo-Express:查看集合的文档
Mongo-Express:查看集合的文档

Mongo-Express:查看和编辑文档
Mongo-Express:查看和编辑文档

使用Docker-Compose进行本地开发设置

我是Docker-Compose的忠实粉丝,用于通过数据库,种子和有用的工具来开发本地开发环境

通常,docker-compose.yml我的MongoDB项目看起来像这样:

version: '3'
services:
  mongo:
    image: "mongo:4.0.2"
    ports:
      - "27017:27017"
    command: --profile=1 --slowms=0
  mongo-seeding:
    build: ./local-dev/mongo-seeding/
    depends_on:
      - mongo
  mongo-express:
    image: "mongo-express:0.49.0"
    ports:
      - "8081:8081"
    depends_on:
      - mongo

打电话吧docker-compose up

  • 首先,它使用官方的MongoDB docker镜像启动MongoDB 。
  • 其次,它运行一个种子脚本,用一些很好的随机化虚拟数据填充MongoDB。我喜欢用Python。在播种脚本Dockerfile可以在GitHub上找到。
  • 最后,它启动一个指向mongo:27017(这是默认值)的Mongo-Express实例。有关更多配置选项,请参阅Docker Hub上映像文档

蒙戈监视器

Mongo-Monitor是一个非常好的命令行工具,可以显示MongoDB集群的设置和运行状况。查看GitHub页面以获取一些屏幕截图。

Mongo Shell命令

按ID查找文档

我们经常通过Id查找某个文档。幸运的是,这个常见用例有一个很好的快捷语法。

# Don't:
db.products.find({ "_id": ObjectId("5cc57fc685e5849abe2266c7")})

# Do:
db.products.find("5cc57fc685e5849abe2266c7")

显示索引大小

db.products.stats()

结果:

"indexSizes": {
      "_id_": 16384,
      "name_1": 16384
},

显示索引用法

基于MongoDB的应用程序达到一定的年龄和大小后,不再清楚哪些索引仍在使用,哪些索引可以删除。幸运的是,有一个命令:

db.products.aggregate( [ { $indexStats: { } } ], { cursor: {} } )

它显示了查询命中索引的频率以及最后一次发生的时间。请注意,重启MongoDB后会重置这些统计信息。

{
      "name": "name_1",
      "key": {
            "name": 1
      },
      "host": "653e83aa76c4:27017",
      "accesses": {
            "ops": NumberLong("150"),
            "since": ISODate("2019-04-28T10:26:14.864Z")
      }
}

MongoDB桌面客户端:Compass和Studio 3T

我是命令行的粉丝。但也有MongoDB的图形桌面客户端可用:

  • MongoDB指南针。有一个限制但免费的社区版本和一个不受限制的版本,是MongoDB订阅的一部分。
  • Studio 3T是一款功能强大的商业工具。

在可视化解释计划,可视化聚合构建,索引管理和就地文档编辑时,这两个工具都很有用。我非常想在性能优化和构建复杂的聚合管道时使用GUI来显示“executionStats”。

via https://phauer.com/2019/mongodb-development-tools-snippets/

MongoDB:有用的开发工具和代码片段
标签: