Проблемът с вашия примерен код е, че find()
връща курсор на база данни
към колекцията, а не всички документи в колекцията. Така че, когато remove
всички документи от home
колекция, курсорът също ще сочи към празна колекция.
За да копирате колекция в друга колекция в същия сървър, можете да използвате MongoDB Aggregation оператор $match и $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Използвайки вашия примерен код, сега можете да направите
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.
Забележка :db.collection.copyTo() е отхвърлен от MongoDB v3.0.
Ако искате да копирате на друг MongoDB сървър, можете да използвате db.cloneCollection() . В PyMongo това би била команда като по-долу:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
В зависимост от общата ви цел може да намерите методи за архивиране на MongoDB полезен.