MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come posso copiare una raccolta da MongoDB usando pymongo e incollarla in un'altra raccolta vuota?

Il problema con il tuo esempio di codice è che find() restituisce un cursore del database alla collezione, non tutti i documenti della collezione. Quindi, quando remove tutti i documenti dalla home raccolta, il cursore punterà anche a una raccolta vuota.

Per copiare una raccolta in un'altra raccolta nello stesso server, puoi utilizzare MongoDB Aggregation operatore $match e $out

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

Usando il tuo codice di esempio, ora puoi fare

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() è stato deprecato da MongoDB v3.0.

Se desideri copiare su un altro server MongoDB, puoi utilizzare db.cloneCollection() . In PyMongo sarebbe un comando come di seguito:

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

A seconda del tuo obiettivo generale, potresti trovare metodi MongoDB BackUp utile.