Problem z twoim przykładem kodu polega na tym, że find()
zwraca kursor bazy danych
do kolekcji, nie wszystkie dokumenty w kolekcji. Więc kiedy remove
wszystkie dokumenty z home
kolekcja, kursor wskaże również pustą kolekcję.
Aby skopiować kolekcję do innej kolekcji na tym samym serwerze, możesz użyć Agregacja MongoDB operator $match i $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Używając przykładowego kodu, teraz możesz zrobić
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.
Uwaga :db.collection.copyTo() został wycofany od MongoDB v3.0.
Jeśli chcesz skopiować na inny serwer MongoDB, możesz użyć db.cloneCollection() . W PyMongo byłoby to polecenie takie jak poniżej:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
W zależności od ogólnego celu możesz znaleźć metody MongoDB BackUp użyteczne.