MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann ich mit Pymongo eine Sammlung aus MongoDB kopieren und in eine andere leere Sammlung einfügen?

Das Problem mit Ihrem Codebeispiel ist, dass find() gibt einen Datenbank-Cursor zurück zur Sammlung, nicht alle Dokumente in der Sammlung. Also beim remove alle Dokumente aus der home Sammlung, zeigt der Cursor auch auf eine leere Sammlung.

Um eine Sammlung in eine andere Sammlung auf demselben Server zu kopieren, können Sie MongoDB Aggregation Operator $match und $out

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

Verwenden Sie Ihren Beispielcode jetzt du kannst

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. 

Hinweis :db.collection.copyTo() ist seit MongoDB v3.0 veraltet.

Wenn Sie auf einen anderen MongoDB-Server kopieren möchten, können Sie verwenden db.cloneCollection() . In PyMongo wäre es ein Befehl wie unten:

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

Abhängig von Ihrem Gesamtziel finden Sie möglicherweise MongoDB-BackUp-Methoden nützlich.