gpt4 book ai didi

mongodb - Mongorestore 通过标准输入到具有不同名称的数据库

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:14 25 4
gpt4 key购买 nike

我一直在努力寻找一种方法来做到这一点,但没有成功,而且我觉得没有一种简单的方法可以做我想做的事。

我一直在使用 mongodump | mongorestore 进行测试作为一种避免创建实际存储的文件集的方法,这在基于云的服务上非常有用。到目前为止,我一直在通过指定相同的数据库来测试它,尽管从技术上讲这不是必需的,就像这样......

mongodump -h hostname -d dumpdb --excludeCollection bigcollection --archive | mongorestore --archive -d dumpdb --drop
mongodump -h hostname -d dumpdb -c bigcollection --archive --queryFile onlythese.json | mongorestore --archive -d dumpdb -c bigcollection --drop

我发现这些选项最适合我;当我尝试用单个数据库指定 -o - 选项,并删除 --archive 时,我遇到了一些问题,但由于这有效,我没有不要惹它。由于我正在恢复到同一个数据库,并且因为当时只恢复了那里的集合,所以我意识到我可以取消 -d-c两个 mongorestore 命令。但是,这很容易做到,并且是为下一步做准备……我想做的就是分两步将指定的数据库恢复到一个不同名称的数据库,就像这样......

mongodump -h hostname -d dumpdb --excludeCollection bigcollection --archive | mongorestore --archive -d restoredb --drop
mongodump -h hostname -d dumpdb -c bigcollection --archive --queryFile onlythese.json | mongorestore --archive -d restoredb -c bigcollection --drop

转储工作正常,但恢复不正常。基于有限的文档,我的假设是转储数据库和恢复数据库需要相同才能工作;如果 mongorestore 中指定的数据库不在转储中,它就不会恢复。我觉得这很烦人;我的另一个想法是按原样恢复数据库,然后将其复制到另一个数据库。我考虑过使用其他工具,例如 mongo-dump-stream ,但考虑到到目前为止一切都在顺利进行,我希望它能与默认工具一起工作。另一方面,我确实将存档转储到一个文件中(如:> dumpdb.tar)并尝试从那里恢复(如 --archive=dumpdb.tar >) 这就是我确认数据库需要在转储中的方式。

欢迎提出任何建议/意见/建议。

最佳答案

mongorestore 3.4 版开始,您可以使用 --nsFrom--nsTo 选项来完成此操作,它们提供了一个模式-based 方法来操作您的集合和/或源和目标之间的数据库的名称。

例如,从名为 dumpdb 的数据库转储到名为 restoredb 的新数据库中:

mongodump -h hostname -d dumpdb --archive | mongorestore --archive --nsFrom "dumpdb.*" --nsTo "restoredb.*" --drop

更多来自 mongodb 文档:https://docs.mongodb.com/manual/reference/program/mongorestore/#change-collections-namespaces-during-restore

关于mongodb - Mongorestore 通过标准输入到具有不同名称的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com