MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment puis-je copier une collection de MongoDB en utilisant pymongo et la coller dans une autre collection vide ?

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.