70

我有一个我没有创建或架构的 Mongo 数据库,有没有一种很好的方法来自省数据库或打印出结构是什么来开始处理正在存储的数据类型,数据类型如何嵌套, ETC?

4

10 回答 10

49

只需通过在 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

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

于 2013-02-05T17:27:55.043 回答
29

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

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

你可以在这里查看它的 Github 存储库:https ://github.com/variety/variety

我可能应该警告你:

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

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

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

于 2013-02-05T17:52:36.133 回答
8

这将打印名称及其类型

var schematodo = db.collection_name.findOne()
for (var key in schematodo) { print (key, typeof key) ; }
于 2015-01-23T10:55:39.700 回答
6

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

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

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

于 2014-06-20T12:14:58.000 回答
6

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

它是一个使用非常简单的 Python 库。你可以试试(甚至贡献)。

于 2015-09-24T19:25:32.890 回答
5

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

不同之处在于 Mongoeye 是一个独立程序(不需要 Mongo Shell)并且具有更多功能(直方图、最常见值等)。

https://github.com/mongoeye/mongoeye

于 2017-07-19T11:02:16.513 回答
4

几天前,我发现 GUI 客户端MongoDB Compass具有一些不错的可视化效果。请参阅产品概述。它直接来自 mongodb 人员并根据他们的文档:

MongoDB Compass 旨在让用户轻松分析和了解 MongoDB 中数据集合的内容...

于 2017-08-04T10:33:13.890 回答
0

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

这种方法是我所知道的最好的方法,因为您还可以找出空集合的模式。

于 2019-03-08T14:52:11.107 回答
0

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

于 2020-10-15T07:10:43.207 回答
0

使用Mongo 指南针

它会按照此处的说明执行样本,它会随机抽取 1000 个文档样本来获取架构 - 它可能会遗漏一些东西,但如果你的数据库有几个 GB,它是唯一合理的选择。

可视化

Mongo Compass 模式选项卡

然后可以将架构导出为 JSON

在此处输入图像描述

文档

于 2022-02-04T11:58:08.033 回答