如何发现 mongo 数据库的结构

我有一个 Mongo 数据库,我没有创建或架构师,有没有一个好的方法来检查数据库或打印出什么结构是开始获得一个处理什么类型的数据存储,数据类型是如何嵌套,等等?

102261 次浏览

只需在 mongo shell 中运行以下命令查询数据库:

use mydb //this switches to the database you want to query
show collections //this command will list all collections in the database
db.collectionName.find().pretty() //this will show all documents in the database in a readable format; do the same for each collection in the database

然后您应该能够检查文档结构。

实际上有一个工具可以帮助你,叫做 Variety:

Http://blog.mongodb.org/post/21923016898/meet-variety-a-schema-analyzer-for-mongodb

您可以在这里查看 Github 回购: https://github.com/variety/variety

我应该提醒你:

  • 它使用 MR 来完成任务
  • 它使用某些其他查询,这些查询可能使生产设置在性能方面几乎停止。

因此,我建议您在开发服务器或副本的隐藏节点上运行它。

根据文档的大小和深度,可能需要很长时间才能理解数据库的粗略结构,但它最终会给出一个。

我建议限制结果集,而不是发出无限制的 find 命令。

use mydb
db.collectionName.find().limit(10)
var z = db.collectionName.find().limit(10)
Object.keys(z[0])
Object.keys(z[1])

这将帮助您理解您的数据库结构或缺乏数据库结构。

这将打印名称及其类型

var schematodo = db.collection_name.findOne()
for (var key in schematodo) { print (key, typeof key) ; }

这是我和我的朋友创建的一个开源工具-https://pypi.python.org/pypi/mongoschema/

这是一个使用非常简单的 Python 库,您可以尝试使用(甚至贡献)。

一种选择是使用 蒙古眼。它是类似于 Variety 的开源工具。

不同之处在于 Mongoeye 是一个独立的程序(不需要 Mongo Shell) ,并且具有更多的特性(直方图、最频繁的值等)。

Https://github.com/mongoeye/mongoeye

几天前,我发现 GUI 客户机 MongoDB 指南针具有一些很好的可视化。看看 产品概览。它直接来自蒙哥布人,根据他们的文件:

MongoDB Compass 的设计目的是让用户能够轻松地分析和理解 MongoDB 中数据集合的内容。

您可以使用 MongoDB 的工具 mongodump。在运行它时,将在执行 monGodump 的目录中创建一个 dump文件夹。在这个文件夹中,有多个文件夹对应于 MongDB 中的数据库,有多个子文件夹对应于集合,有多个文件夹对应于文档。

这是我所知道的最好的方法,因为您也可以看出 空的收藏品的模式。

您可能已经问过验证模式,以下是如何得到验证模式的答案: 如何检索 MongoDb 集合验证器规则?

使用 蒙戈指南针

它会像这里解释的那样做一个样本 它会对1000个文档进行随机抽样来获取模式——它可能会遗漏一些内容,但如果数据库有几个 GB,那么这是唯一合理的选择。

想象

Mongo Compass Schema tab

然后可以将模式导出为 JSON

enter image description here

文件