2016-12-09 87 views
0

由於eval()和copyTo()已從mongodb3 +中棄用。我在尋找一種方式採取備份使用的東西收集像使用pymongo備份集合

db.collection.find()的forEach(函數(d){db.collection_backup.save(d)})

我基本上在這兩個方面尋求幫助。

1:我如何使用PyMongo在Mongo上運行任何.js文件。例如: mongo < something.js和js文件可以有一些特定的命令或函數。 2:我如何運行我的上面的代碼,使用pymongo來跨數據庫備份集合

在此先感謝您的幫助。

回答

0

PyMongo確實不是包括用於在服務器上執行.js文件的功能。

具有$ out的聚合管道是複製集合的有效方法。例如,如果要備份「角色」集合,例如,在每個數據庫中:

from pymongo import MongoClient 

client = MongoClient() 
for db_name in client.database_names(): 
    db = client[db_name] 
    if 'role' in db.collection_names(): 
     print('copy %s.role' % db_name) 
     db.role.aggregate([{'$match': {}}, {'$out': 'role_backup'}]) 
+0

謝謝Jesse的回覆。我在這裏的要求是對數據庫進行reather和db的備份。讓我更加清楚。我有一個mongodb-3.2.4 replicaset,它有100個數據庫,如client1,client2,client3 .... upto client100。每個客戶端數據庫都有一個名爲'role'的集合。我們的應用程序將對集合進行一些更改,因此爲了更安全一些,我必須在應用程序代碼更改之前對所有集合進行備份。我有一個像上面描述的功能來進行備份。我需要運行它並將所有dbs的集合備份起來。 – linus999

+0

http://stackoverflow.com/questions/11858689/pymongo-foreach-formatting?noredirect=1&lq=1可能類似於@Ivc在這裏回答的內容。讓我看看我能否找到任何指針。 – linus999

+0

更新了我的答案。 –