MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como posso copiar uma coleção do MongoDB usando pymongo e colar em outra coleção vazia?


O problema com seu exemplo de código é que find() retorna um cursor de banco de dados à coleção, nem todos os documentos da coleção. Então, quando você remove todos os documentos da home coleção, o cursor também apontará para uma coleção vazia.

Para copiar uma coleção para outra coleção no mesmo servidor, você pode utilizar a MongoDB Aggregation operador $match e $out
pipeline = [ {"$match": {}}, 
             {"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)

Usando seu código de exemplo, agora você pode fazer
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. 

Observação :db.collection.copyTo() foi preterido desde o MongoDB v3.0.

Se você deseja copiar para outro servidor MongoDB, pode utilizar db.cloneCollection() . No PyMongo seria um comando como abaixo:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})

Dependendo do seu objetivo geral, você pode encontrar Métodos de backup do MongoDB útil.