O problema com seu exemplo de código é que
find()
retorna um cursor de banco de dados
à coleção, nem todos os documentos da coleção. Então, quando você remove
todos os documentos da home
coleção, o cursor também apontará para uma coleção vazia. Para copiar uma coleção para outra coleção no mesmo servidor, você pode utilizar a MongoDB Aggregation operador $match e $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Usando seu código de exemplo, agora você pode fazer
source = db["source_collection"]
destination = db["destination_collection"]
# Remove all documents, or make modifications.
source.remove({})
# Restore documents from the source collection.
for doc in destination:
source.insert(doc)
# or instead you can just use the same aggregation method above but reverse the collection name.
Observação :db.collection.copyTo() foi preterido desde o MongoDB v3.0.
Se você deseja copiar para outro servidor MongoDB, pode utilizar db.cloneCollection() . No PyMongo seria um comando como abaixo:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
Dependendo do seu objetivo geral, você pode encontrar Métodos de backup do MongoDB útil.