【发布时间】:2017-06-24 09:05:23
【问题描述】:
我可以进行 mongodb 数据备份,但我不确定 mongodb schama 备份。 有没有办法只转储 MONGODB 模式而不转储数据?
【问题讨论】:
我可以进行 mongodb 数据备份,但我不确定 mongodb schama 备份。 有没有办法只转储 MONGODB 模式而不转储数据?
【问题讨论】:
您需要使用 mongorestore... 用于导入 json 或 csv 等操作。
您可以在下面的文档中阅读有关 mongorestore 的更多信息;我会看一下并阅读它们,因为它们非常有帮助。
http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongorestore
您还可以查看http://learnmongo.com 以获取提示和帮助! 或者你可以访问链接
【讨论】:
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
如果您的集合中的所有文档都遵循相同的架构,则此方法将适用于您。
【讨论】:
我是这样做的:
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 时,它不起作用。不清楚为什么。