Проблема с вашим примером кода заключается в том, что find()
возвращает database cursor в коллекцию, а не все документы в коллекции. Поэтому, когда вы получаете remove
все документы из коллекции home
, курсор также укажет на пустую коллекцию.
Чтобы скопировать коллекцию в другую коллекцию в том же сервере, вы можете использовать MongoDB Aggregation оператор $match и $out
pipeline = [ {"$match": {}},
{"$out": "destination_collection"},
]
db.source_collection.aggregate(pipeline)
Используя ваш пример кода, теперь вы можете сделать
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.
Примечание: db.collection.copyTo() устарел, так как MongoDB v3.0.
Если вы хотите скопировать на другой сервер MongoDB, вы можете использовать db.cloneCollection(). В PyMongo это будет команда, например ниже:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
В зависимости от вашей общей цели, вы можете найти MongoDB BackUp methods полезным.
У mongodb есть функция 'copyTo', вы можете использовать ее. [https://docs.mongodb.com/manual/reference/method/db.collection.copyTo/](https://docs.mongodb.com/manual/reference/method/db.collection.copyTo/) – gzc
Но если я удалю документы из «дома», а затем скопирую их, он будет пустым. –