sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo puedo copiar una colección de MongoDB usando pymongo y pegarla en otra colección vacía?

El problema con su código de ejemplo es que find() devuelve un cursor de base de datos a la colección, no todos los documentos de la colección. Así que cuando remove todos los documentos de la home colección, el cursor también apuntará a una colección vacía.

Para copiar una colección a otra colección en el mismo servidor, puede utilizar MongoDB Aggregation operador $match y $out

pipeline = [ {"$match": {}}, 
             {"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)

Usando su código de ejemplo, ahora puedes hacer

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. 

Nota :db.collection.copyTo() ha quedado en desuso desde MongoDB v3.0.

Si desea copiar a otro servidor MongoDB, puede utilizar db.cloneCollection() . En PyMongo sería un comando como el siguiente:

db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})

Dependiendo de su objetivo general, puede encontrar métodos de copia de seguridad de MongoDB útil.