Problemet med ditt kodexempel är att find()
returnerar en databasmarkör
till samlingen, inte alla dokument i samlingen. Så när du remove
alla dokument från home
samling, kommer markören också att peka på en tom samling.
För att kopiera en samling till en annan samling på samma server kan du använda MongoDB Aggregation operatör $match och $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Använd din exempelkod, nu du kan göra
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.
Obs :db.collection.copyTo() har fasats ut sedan MongoDB v3.0.
Om du vill kopiera till en annan MongoDB-server kan du använda db.cloneCollection() . I PyMongo skulle det vara ett kommando som nedan:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
Beroende på ditt övergripande mål kan du hitta MongoDB BackUp-metoder användbar.