【发布时间】:2013-02-05 17:18:45
【问题描述】:
我有一个不是我创建或架构师的 Mongo 数据库,有没有一种很好的方法来内省数据库或打印出结构是什么来开始处理正在存储的数据类型,数据如何类型是嵌套的,等等?
【问题讨论】:
标签: mongodb
我有一个不是我创建或架构师的 Mongo 数据库,有没有一种很好的方法来内省数据库或打印出结构是什么来开始处理正在存储的数据类型,数据如何类型是嵌套的,等等?
【问题讨论】:
标签: mongodb
只需在 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
然后您应该能够检查文档结构。
【讨论】:
mongo mongo-struc.js > struc.json
typeof函数。它检索 js 类型而不是 BSON 类型。
这里实际上有一个工具可以帮助你,叫做 Variety:
http://blog.mongodb.org/post/21923016898/meet-variety-a-schema-analyzer-for-mongodb
你可以在这里查看它的 Github repo:https://github.com/variety/variety
我可能应该警告你:
因此,我建议您在开发服务器或副本的隐藏节点或其他东西上运行它。
根据文档的大小和深度,可能需要很长时间才能通过此了解数据库的粗略结构,但最终会给出答案。
【讨论】:
这将打印名称及其类型
var schematodo = db.collection_name.findOne()
for (var key in schematodo) { print (key, typeof key) ; }
【讨论】:
for(var key in fields) { print (key, typeof fields[key]); }
我建议限制结果集而不是发出不受限制的查找命令。
use mydb
db.collectionName.find().limit(10)
var z = db.collectionName.find().limit(10)
Object.keys(z[0])
Object.keys(z[1])
这将帮助您了解您的数据库结构或缺乏结构。
【讨论】:
这是我和朋友一起创建的开源工具 - https://pypi.python.org/pypi/mongoschema/
这是一个使用非常简单的 Python 库。你可以试试(甚至贡献)。
【讨论】:
一种选择是使用Mongoeye。它是类似于 Variety 的开源工具。
不同的是,Mongoeye 是一个独立的程序(不需要 Mongo Shell)并且具有更多的功能(直方图、最常见的值等)。
【讨论】:
几天前,我发现 GUI 客户端 MongoDB Compass 具有一些不错的可视化效果。请参阅product overview。它直接来自 mongodb 人并根据他们的文档:
MongoDB Compass 旨在让用户轻松分析和了解其在 MongoDB 中收集的数据的内容...
【讨论】:
您可以使用 MongoDB 的工具mongodump。运行它时,会在执行 mongodump 的目录中创建一个 dump 文件夹。在那个文件夹中,有多个文件夹对应MongDB中的数据库,还有对应集合的子文件夹,对应文档的文件。
这种方法是我所知道的最好的方法,因为您还可以找出空集合的架构。
【讨论】:
您可能已经询问过验证架构。以下是如何获得它的答案: How to retrieve MongoDb collection validator rules?
【讨论】:
按照此处的说明进行示例 它会随机抽取 1000 个文档样本来获取架构 - 它可能会遗漏一些东西,但如果您的数据库有几个 GB,这是唯一合理的选择。
【讨论】: