![在两台服务器和不同的 mongo 版本之间复制 mongodb 集合...](https://linux22.com/image/629969/%E5%9C%A8%E4%B8%A4%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%92%8C%E4%B8%8D%E5%90%8C%E7%9A%84%20mongo%20%E7%89%88%E6%9C%AC%E4%B9%8B%E9%97%B4%E5%A4%8D%E5%88%B6%20mongodb%20%E9%9B%86%E5%90%88....png)
我在本地运行的项目中有一个 mongoDB 集合,必须将该集合复制到开发服务器。考虑到以下情况,您能告诉我如何执行此操作吗:
本地机器(源)可以从外部访问,但只能使用 IP。
本地mongo的版本是2.0.4,而开发服务器上的mongo版本是2.2.2。
我做了一些研究,但有些事情我不确定……例如,我应该为源数据库选择哪些凭据?...用于 SSH 连接的凭据?...或...?...
提前致谢 :)
答案1
您可以从目标服务器创建另一个连接并使用该save()
功能。
例如:
conn2 = new Mongo(“目标服务器:端口”)
desti_db = conn2.getDB(“destination_db_name”) -->现在您可以从源数据库连接访问目标 mongodb 服务器。
db.sourceCollection.find().forEach( function(x){ desti_db.targetCollectionName.save(x) } ); --> 读取当前源数据库集合并将其保存在目标 mongodb 中
答案2
我设法找到的最佳解决方案think of
是这个:
- 我对源收集数据进行了转储:
db.prices.find()
- 修改结果(JSON 列表),例如
{"_id" : ObjectId("..."), "action" : "show", "price" : 12 } {"_id" : ObjectId("..."), "action" : "hide", "price" : 10 } {"_id" : ObjectId("..."), "action" : "poke", "price" : 20 } ................
到这样的一个(在每个 JSON 后添加“,”,删除了 ID,因此我在最后有一个数组):
[ {"action" : "show", "price" : 12 }, {"action" : "hide", "price" : 10 }, {"action" : "poke", "price" : 20 } ................ ]
然后将这个新的 JSON 数组传递给新集合的插入方法:(直接从我用来制作它的文本编辑器中复制剪贴板中的数组)
db.prices.inset(
+ Shift+插入 +)
瞧:)...您的所有数据都已传输:)...
答案3
首先,我建议您升级 MongoDB 版本 - 您的开发版本和本地版本都非常旧,如果可能的话,您应该将它们都设置为同一版本。2.0 和 2.2 版本非常不同(2.2 中没有全局锁定),并且自您列出的版本以来,这两个版本都有多个稳定版本。最后,这两个版本都被视为生命尽头。
至于如何在它们之间传输数据,您有几种选择,但如果数据相对较小,那么最简单的选择是mongodump只需使用它来转储您想要传输到 BSON 的本地数据(如果您获取整个集合或数据库,将包括索引等),然后使用mongorestore将数据插入到 dev 数据库中。再次强调,我建议使用比 2.2.2 或 2.0.4 更新的 mongodump/mongorestore 版本 - 更高版本的工具修复了几个错误,否则您可能会遇到这些错误(更高版本的工具应该向后兼容)。
至于其他选项,如果您要使用整个数据库,那么您只需将该数据库的整个文件集从本地主机复制到开发服务器即可。您需要重新启动数据库,这意味着每次在开发服务器上都要清除该数据库,但根据您的需要,这可能是一个选项。您还可以查看mongo 连接器以此来以更实时和持续的方式在本地和开发之间镜像数据。可能还有其他几种方法可以实现这一点,但这些是最直接的。
答案4
MongoCopyPaste:查找远程服务器上的任何注册表。在目标服务器中复制并粘贴。从一个集合到多个集合。