我有一个我没有创建或架构的 Mongo 数据库,有没有一种好方法可以内省数据库或打印出结构是什么,以开始处理正在存储的数据类型以及数据类型如何嵌套等?
只需在 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
我可能应该警告你:
因此,我建议您在开发服务器或副本的隐藏节点或其他节点上运行它。
根据文档的大小和深度,可能需要很长时间才能通过此了解数据库的粗略结构,但最终会给出一个。
这将打印名称及其类型
var schematodo = db.collection_name.findOne()
for (var key in schematodo) { print (key, typeof 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 具有一些不错的可视化效果。请参阅产品概述。它直接来自 mongodb 人员并根据他们的文档:
MongoDB Compass 旨在让用户轻松分析和理解 MongoDB 中数据集合的内容...
您可能询问过验证架构。以下是如何获得它的答案: 如何检索MongoDb集合验证器规则?
如果您使用较新的 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' │
...
如果您想了解它是如何工作的,它的来源是这里。
您可以使用MongoDB的工具
mongodump
。运行它时,会在执行 mongodump 的目录中创建一个 dump
文件夹。在该文件夹中,有多个文件夹对应MongDB中的数据库,还有对应集合的子文件夹,以及对应文档的文件。
这是我所知道的最好的方法,因为你还可以看出空集合的模式。