2016-08-17 67 views
2

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

例如:

来源:服务器1:27017

db.students:

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

目的地:服务器2:27017

db.students:

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

回答

0

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

另一种方法:

如果你不想保持在同一时间两个服务器的连接,那么你可以去下面的方法。

1)从Source : server1:27017

mongodump -d some_database -c some_collection

2)还原使用mongorestore转储导出使用mongodump收集到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

请注意,我们不能引用同一字段(此处为前缀用零号更新相同的集合),因为这功能在MongoDB中尚不受支持。

请参阅SERVER-1765

MongoDB concatenate strings from two fields into a third field

希望它能帮助!

+0

谢谢。插入前有没有办法修改数据?我知道mongo的导入和导出。我试图节省一些时间。 –

+0

由于您的集合非常大,因此请在数据库层本身中执行此过程。在临时集合中使用mongodump,mongorestore,然后将$ project,$ concat,$ out一起存储为期望的集合,最后删除临时集合。 –

相关问题