Le problème avec votre exemple de code est que find()
renvoie un curseur de base de données
à la collection, pas tous les documents de la collection. Ainsi, lorsque vous remove
tous les documents du home
collection, le curseur pointera également vers une collection vide.
Afin de copier une collection vers une autre collection sur le même serveur, vous pouvez utiliser MongoDB Aggregation opérateur $match et $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
En utilisant votre exemple de code, maintenant vous pouvez faire
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.
Remarque :db.collection.copyTo() est obsolète depuis MongoDB v3.0.
Si vous souhaitez copier sur un autre serveur MongoDB, vous pouvez utiliser db.cloneCollection() . Dans PyMongo, ce serait une commande telle que ci-dessous :
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
En fonction de votre objectif global, vous pouvez trouver des Méthodes de sauvegarde MongoDB utile.