【问题标题】:How can I discover a mongo database's structure如何发现 mongodb 数据库结构
【发布时间】:2013-02-05 17:18:45
【问题描述】:

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

【问题讨论】:

    标签: mongodb


    【解决方案1】:

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

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

    【讨论】:

    • 如果某些文档与其他文档不同怎么办?该方法不会显示所有字段或存储的整个结构。
    • @Sammaye 你是对的......它需要一个脚本来访问所有文档并比较所有键然后打印树结构可能是显示整个结构并制作它的一种很好的视觉方式易消化
    • @Sammaye @ssbrewster :您可以使用this 脚本来获取您收藏的结构。让我知道它是否有帮助。 mongo mongo-struc.js > struc.json
    • 脚本使用typeof函数。它检索 js 类型而不是 BSON 类型。
    【解决方案2】:

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

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

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

    我可能应该警告你:

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

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

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

    【讨论】:

    • 新网址,最近更新到今天 2014-10-14。 github.com/variety/variety Variety,MongoDB 的模式分析器。很有帮助!
    【解决方案3】:

    这将打印名称及其类型

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

    【讨论】:

    • 由于某些原因,对我来说,当存在 ObjectId 和 Number 类型时,它会为每个字段返回类型“字符串”。
    • for(var key in fields) { print (key, typeof fields[key]); }
    【解决方案4】:

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

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

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

    【讨论】:

    • 唯一的问题是,没有办法说你得到的数字代表数据库结构,你可以有 1000001 条记录并限制在 1000000 条记录,但错过了最后一个文档中的现有字段因为其他 1000000 没有它
    • 我同意你的看法。然而,对于快速和肮脏的,它可能就足够了。我知道许多使用 mongo 用作类似于传统 RDMS 的半结构化数据存储的用例。在另一种情况下,这种技术不会给出完整的结构,但它至少可以快速提供一些东西。我使用了多种工具,非常喜欢它进行全面的模式分析。
    • 是的,在某处有一个工具,忘记了它的名字,它实际上需要 10 个有限的 10 个查询中的 10 个查询,以尝试创建一个高性能的模式分析器。
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

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

      https://github.com/mongoeye/mongoeye

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

        【解决方案8】:

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

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

        【讨论】:

          【解决方案9】:

          您可能已经询问过验证架构。以下是如何获得它的答案: How to retrieve MongoDb collection validator rules?

          【讨论】:

            【解决方案10】:

            使用Mongo Compass

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

            可视化

            然后可以将架构导出为 JSON

            Documentation

            【讨论】:

              猜你喜欢
              • 2010-10-09
              • 2022-01-11
              • 2014-02-06
              • 1970-01-01
              • 2020-03-10
              • 2023-04-06
              • 1970-01-01
              • 2015-12-20
              • 2017-03-30
              相关资源
              最近更新 更多