如何使用 pymongo 从 MongoDB 复制一个集合并粘贴到另一个空集合?
问题:如何使用 pymongo 从 MongoDB 复制一个集合并粘贴到另一个空集合? 我想复制完整的收藏(例如名字'home')。 然后在“home”集合中做一些更改或删除其中的文档(不是集合)。 然后将更改后的 'home' 集合从项目 1 替换为其默认状态。 我接下来做: db = client["database"] home = db['home'].find() # get colle
·
问题:如何使用 pymongo 从 MongoDB 复制一个集合并粘贴到另一个空集合?
-
我想复制完整的收藏(例如名字'home')。
-
然后在“home”集合中做一些更改或删除其中的文档(不是集合)。
-
然后将更改后的 'home' 集合从项目 1 替换为其默认状态。
我接下来做:
db = client["database"]
home = db['home'].find() # get collection.
db['home'].remove({}) # remove doc from home
for i in home:
self.db['home'].insert(i)
但是集合是空的。
解答
您的代码示例的问题是find()
将数据库游标返回到集合,而不是集合中的所有文档。所以当你remove
所有文档都来自home
集合时,光标也会指向一个空集合。
为了将一个集合复制到同一服务器中的另一个集合,您可以使用MongoDB 聚合运算符$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.
Note :db.collection.copyTo()自 MongoDB v3.0 起已被弃用。
如果你想复制到另一个 MongoDB 服务器,你可以使用db.cloneCollection()。在 PyMongo 中,它将是如下命令:
db.command("cloneCollection", **{'collection': "databaseName.source_collection", 'from': "another_host:another_port"})
根据您的总体目标,您可能会发现MongoDB 备份方法很有用。
更多推荐
已为社区贡献32870条内容
所有评论(0)