我在生产中使用MongoDB多年。在这个时候,我尝试了不同的工具和开发方法; 一些证明对我们有用,有些则没有。在这篇文章中,我喜欢分享方便的CLI工具,用于处理MongoDB,基于Docker的本地开发方法和有用的Mongo shell代码片段。
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: {} })
- 按ID获取文档:
- MongoDB桌面客户端
使用Mongo-Hacker进行Mongo Shell增强功能
我强烈建议安装Mongo-Hacker。它默认为语法着色和格式化提供了Mongo Shell的简洁增强功能(无需再添加.pretty()
)。还有更多要发现的东西; 只需查看文档。
fzf-Powered Shell历史搜索
fzf是一个非常棒的命令行工具,用于模糊搜索文件和文件夹之类的东西。但对我来说,fzf最强大的功能是将模糊搜索应用于shell历史(通过键绑定)。说到MongoDB,我使用模糊历史搜索来快速找到mongo
连接到某个数据库所需的连接线。只需点击Ctrl-R
并输入“mongo databaseName / username / appName”即可。
不用说,在shell历史文件中使用密码时应该加密磁盘。
Mongo-Express,一个MongoDB Web客户端
Mongo-Express是MongoDB的一个有用的Web客户端。这不是一种美,但有助于快速查看某些文档并更改它们,而无需在专用客户端中配置连接。我喜欢在本地开发期间使用它,我在使用Docker-Compose的MongoDB容器旁边启动它。有关详细信息,请查看下一节。
使用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/