Il problema con il tuo esempio di codice è che find()
restituisce un cursore del database
alla collezione, non tutti i documenti della collezione. Quindi, quando remove
tutti i documenti dalla home
raccolta, il cursore punterà anche a una raccolta vuota.
Per copiare una raccolta in un'altra raccolta nello stesso server, puoi utilizzare MongoDB Aggregation operatore $match e $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Usando il tuo codice di esempio, ora puoi fare
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() è stato deprecato da MongoDB v3.0.
Se desideri copiare su un altro server MongoDB, puoi utilizzare db.cloneCollection() . In PyMongo sarebbe un comando come di seguito:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
A seconda del tuo obiettivo generale, potresti trovare metodi MongoDB BackUp utile.