Problém s vaším příkladem kódu je v tom, že find()
vrátí databázový kurzor
do sbírky, ne všechny dokumenty ve sbírce. Takže když remove
všechny dokumenty z home
kolekce, kurzor také ukáže na prázdnou kolekci.
Chcete-li zkopírovat sbírku do jiné kolekce na stejném serveru, můžete použít Agregace MongoDB operátor $match a $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Pomocí svého vzorového kódu teď můžete udělat
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.
Poznámka :db.collection.copyTo() byl zastaralý od MongoDB v3.0.
Pokud byste chtěli zkopírovat na jiný server MongoDB, můžete použít db.cloneCollection() . V PyMongu by to byl příkaz jako níže:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
V závislosti na vašem celkovém cíli můžete najít Metody zálohování MongoDB užitečný.