El problema con su código de ejemplo es que find()
devuelve un cursor de base de datos
a la colección, no todos los documentos de la colección. Así que cuando remove
todos los documentos de la home
colección, el cursor también apuntará a una colección vacía.
Para copiar una colección a otra colección en el mismo servidor, puede utilizar MongoDB Aggregation operador $match y $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Usando su código de ejemplo, ahora puedes hacer
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.
Nota :db.collection.copyTo() ha quedado en desuso desde MongoDB v3.0.
Si desea copiar a otro servidor MongoDB, puede utilizar db.cloneCollection() . En PyMongo sería un comando como el siguiente:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
Dependiendo de su objetivo general, puede encontrar métodos de copia de seguridad de MongoDB útil.