如何获取 mongodb 模式转储

Posted

技术标签:

【中文标题】如何获取 mongodb 模式转储【英文标题】:How to get mongodb schema dump 【发布时间】:2017-06-24 09:05:23 【问题描述】:

我可以进行 mongodb 数据备份,但我不确定 mongodb schama 备份。 有没有办法只转储 MONGODB 模式而不转储数据?

【问题讨论】:

【参考方案1】:

您需要使用 mongorestore... 用于导入 json 或 csv 等操作。

您可以在下面的文档中阅读有关 mongorestore 的更多信息;我会看一下并阅读它们,因为它们非常有帮助。

http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongorestore

您还可以查看http://learnmongo.com 以获取提示和帮助! 或者你可以访问链接

How to use the dumped data by mongodump?希望这对你有帮助。

【讨论】:

在 MongoDB 链接中没有看到任何转储/导出模式选项。确实找到了一项感兴趣的项目,“mongodump 仅捕获数据库中的文档”。如果 mongodump 没有捕获 schema,mongorestore 如何恢复它们? 是的,问题是关于架构信息,而不是数据。即使 mongo 是无模式的,问题是关于如何从数据库中获取一些结构。如果您使用 Mongoose 之类的东西,即使是第一条记录也会很有价值【参考方案2】:

MongoDB 是一个 NoSQL 数据库。

任何集合都没有固定的模式,因此 mongo shell 中没有可用的函数来查找集合模式。

固定架构适用于 RDBMS 数据库。在 NoSQL DB(例如 mongodb)中,它不是必需的,但如果需要,您可以使用您的实现逻辑强制执行相同的模式。

同一集合中的文档可以属于不同的架构。请看下面的例子

db.mycollection.insert([ 
 "_id":1, "name":"A", 
 "_id":2, "name":"CD", "age":29, 
 "_id":3, "name":"AB", "age":28, 
 "_id":4, "name":"ABC", "age":27, "emailId":"abc@xyz.com", 
 "_id":5, "name":"ABCD", "age":29, "emailId":"abcd@xyz.com"]);

db.mycollection.find();

 "_id" : 1, "name" : "A" 
 "_id" : 2, "name" : "CD", "age" : 29 
 "_id" : 3, "name" : "AB", "age" : 28 
 "_id" : 4, "name" : "ABC", "age" : 27, "emailId" : "abc@xyz.com" 
 "_id" : 5, "name" : "ABCD", "age" : 29, "emailId" : "abcd@xyz.com" 

一种查找模式的方法

In Mongo Shell
var k = db.mycollection.findOne();
for ( i in k)print (i);
  _id
  name

如果您的集合中的所有文档都遵循相同的架构,则此方法将适用于您。

【讨论】:

尽管 MongoDB 是无模式的,但有一个脚本来设置分片和索引也很不错。 MongoDB 现在支持模式验证器 + 绝对是一个有效的点,希望导出并可能对除数据之外的所有索引和类似的模式相关设置进行版本控制。 这很简洁,但它不做嵌套结构,只是顶层。 2020年有没有更好的办法? @dcsan - 您可以使用 Compass docs.mongodb.com/compass/current/schema/export 分析和导出架构【参考方案3】:

我是这样做的:

mongodump --uri="mongodb://localhost/mydb" -o ./mydb-dump
find ./mydb-dump -name *.bson -exec truncate -s 0  \;

解释:我正在转储整个数据库,然后将所有 .bson 文件(保存收集数据)截断为零字节。

限制:显然,这仅在源数据库很小的情况下才实用,否则您会生成大量数据转储而只是丢弃其中的大部分。

要恢复这个-

mongorestore --uri="mongodb://some-other-server/mydb" ./mydb-dump

如果有更好的方法,我很想知道它是什么!

【讨论】:

不得不做for /r %i in (*.bson) do copy /Y nul: %i 而不是你的第二行。但是在使用 mongorestore 时,它​​不起作用。为每个文件提供错误don't know what to do with file 我通过使用以/db 结尾的 uri 将集合转储到 ./dump/db 然后使用 ./dump/ 恢复而不在 uri 中指定数据库来使其工作。在 uri 中为还原指定 db 时,它不起作用。不清楚为什么。

以上是关于如何获取 mongodb 模式转储的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 erlang 故障转储文件?

如何获取已处理异常的故障转储?

JVM崩溃..如何获取错误日志或核心转储

如何获取可执行文件的字符串转储?

如何从存储在 mongodb 中的对象中获取日期?

如何获取结构数据的十六进制转储