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.