如何发现mongo数据库的结构

问题描述 投票:0回答:11

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

mongodb
11个回答
53
投票

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

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


29
投票

实际上有一个工具可以帮助您,称为 Variety:

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

您可以在此处查看它的 Github 存储库:https://github.com/variety/variety

我可能应该警告你:

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

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

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


9
投票

这将打印名称及其类型

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

6
投票

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

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

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


6
投票

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

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


5
投票

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

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

https://github.com/mongoeye/mongoeye


5
投票

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

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


2
投票

使用Mongo指南针

按照此处的说明进行示例 它会随机抽取 1000 个文档来获取架构 - 它可能会遗漏一些内容,但如果您的数据库有几个 GB,那么这是唯一合理的选择。

可视化

然后可以将架构导出为 JSON

文档


1
投票

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


0
投票

如果您使用较新的 mongosh,默认情况下包含一个非常方便的代码片段,名为

analyze-schema
,它会生成一个表格,其中包含每个属性的类型细分。

例如:

$ mongosh dbname
> schema(db.users) // use your collection name or a cursor here
┌─────────┬───────────────────────────────────────────┬───────────┬─────────────┐
│ (index) │                     0                     │     1     │      2      │
├─────────┼───────────────────────────────────────────┼───────────┼─────────────┤
│    0    │ '_id                                    ' │ '100.0 %' │ 'ObjectId'  │
│    1    │ 'accountStatus                          ' │ '100.0 %' │ 'Document'  │
│    2    │ 'accountStatus.active                   ' │ '100.0 %' │  'Boolean'  │
│    3    │ 'accountStatus.deleted                  ' │ '88.0 %'  │  'Boolean'  │
│    4    │ 'accountStatus.deleted                  ' │ '12.0 %'  │ 'Undefined' │
│    5    │ 'accountStatus.verified                 ' │ '100.0 %' │  'Boolean'  │
│    6    │ 'admin                                  ' │ '100.0 %' │  'Boolean'  │
│    7    │ 'domain                                 ' │ '77.1 %'  │ 'Undefined' │
│    8    │ 'domain                                 ' │ '22.9 %'  │ 'ObjectId'  │
│    9    │ 'email                                  ' │ '100.0 %' │   'Email'   │
│   10    │ 'firstName                              ' │ '100.0 %' │  'String'   │
...

如果您想了解它是如何工作的,它的来源是这里


-1
投票

您可以使用MongoDB的工具

mongodump
。运行它时,会在执行 mongodump 的目录中创建一个
dump
文件夹。在该文件夹中,有多个文件夹对应MongDB中的数据库,还有对应集合的子文件夹,以及对应文档的文件。

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

© www.soinside.com 2019 - 2024. All rights reserved.