Het probleem met uw codevoorbeeld is dat find()
geeft een databasecursor
terug naar de collectie, niet alle documenten in de collectie. Dus wanneer u remove
alle documenten van de home
collectie, wijst de cursor ook naar een lege collectie.
Om een verzameling naar een andere verzameling op dezelfde server te kopiëren, kunt u MongoDB Aggregation operator $match en $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Gebruik uw voorbeeldcode, nu je kunt doen
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.
Opmerking :db.collection.copyTo() is verouderd sinds MongoDB v3.0.
Als u naar een andere MongoDB-server wilt kopiëren, kunt u gebruiken db.cloneCollection() . In PyMongo zou het een commando zijn zoals hieronder:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
Afhankelijk van uw algemene doel, vindt u mogelijk MongoDB BackUp-methoden bruikbaar.