Problemet med dit kodeeksempel er, at find()
returnerer en databasemarkør
til samlingen, ikke alle dokumenter i samlingen. Så når du remove
alle dokumenter fra home
samling, vil markøren også pege på en tom samling.
For at kopiere en samling til en anden samling på den samme server kan du bruge MongoDB Aggregation operatør $match og $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Brug din eksempelkode, nu du kan gøre
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.
Bemærk :db.collection.copyTo() er blevet forældet siden MongoDB v3.0.
Hvis du gerne vil kopiere til en anden MongoDB-server, kan du bruge db.cloneCollection() . I PyMongo ville det være en kommando som nedenfor:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
Afhængigt af dit overordnede mål kan du finde MongoDB BackUp-metoder nyttig.