如何在更改文档时将一个集合复制到另一个服务器

时间:2016-08-17 14:10:01

标签: javascript mongodb

我需要将一个集合复制到另一个服务器并更改每个文档中的值。集合非常大,因此,为了节省时间,而不是复制集合和修改数据,我想知道是否有一个脚本,当它通过文档时,它会在将文档插入另一个文档之前更改值服务器。 修改几乎用0填充字段。

例如:

来源:server1:27017

db.students:

{"_id" : ObjectId("..."), "sId" : "1234", "grade" : 4 }
{"_id" : ObjectId("..."), "sId" : "4444", "grade" : 3 }
{"_id" : ObjectId("..."), "sId" : "5555", "grade" : 5 }

目的地:server2:27017

db.students:

{"_id" : ObjectId("..."), "sId" : "0001234", "grade" : 4 }
{"_id" : ObjectId("..."), "sId" : "0004444", "grade" : 3 }
{"_id" : ObjectId("..."), "sId" : "0005555", "grade" : 5 }

1 个答案:

答案 0 :(得分:0)

您的Source : server1:27017Destination: server2:27017是两个不同的服务器,我们需要两个不同的连接。很明显,它们是两台不同的机器,因此您需要从一台服务器获取数据并对其进行修改并将其保存在另一台服务器中。正如您所提到的,修改更简单,只需添加一些前导零,就可以通过正则表达式或简单的javascript函数来完成。

替代方法:

如果您不想同时保留两个服务器连接,那么您可以采用以下方法。

1)使用来自Source : server1:27017

的mongodump导出集合

mongodump -d some_database -c some_collection

2)使用mongorestore将转储恢复到Destination: server2:27017

mongorestore -d some_other_db -c some_or_other_collection dump/some_collection.bson

3.1)然后编写一个javascript函数来检索和更新带有前导零的所有记录。

试试这个

3.2)总计使用$project$concat$out

请注意,我们无法通过引用相同的字段来更新相同的集合(此处为id添加前缀为零),因为MongoDB中尚不支持此功能。

请参阅SERVER-1765

MongoDB concatenate strings from two fields into a third field

希望它有帮助!