gpt4 book ai didi

python - 如何使用 PyMongo 将集合从一个数据库复制到同一服务器上的另一个数据库?

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:49 31 4
gpt4 key购买 nike

我正在尝试将 MongoDB 集合从一个数据库复制到同一服务器上的另一个数据库。

from pymongo import MongoClient
client = MongoClient()
client.db1.coll1.insert({'content':'hello world'})

我想将db1.coll复制到同一服务器上的db2.coll2

我尝试遵循How to copy a collection from one database to another in MongoDB中描述的“复制和移动”方法。但这在 pymongo 中不起作用。

特别是复制步骤

client.db1.coll1.aggregate([{'$out':'coll2'}])

可以工作,但在尝试执行移动时出现错误:

>>> client.admin.command({'renameCollection':'db1.coll2', 'to':'db2.coll2'})
OperationFailure: no such command: 'to', bad cmd: '{ to: "db2.coll2", renameCollection: "db1.coll2" }

最佳答案

经过大量的困惑和深思熟虑,我最终能够追踪到 Python 中的字典是无序的(至少在 3.6 之前),而 MongoDB 需要一个有序的 BSON 字典。

按照 How to get ordered dictionaries in pymongo? 中指出的使用 OrderedDict解决这个问题:

>>> from collections import OrderedDict
>>> client.admin.command(
OrderedDict([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}

另一种选择是使用 BSON 中的 SON 对象。

>>> import bson
>>> client.admin.command(
bson.son.SON([('renameCollection','db1.coll2'), ('to','db2.coll2')]))
{u'ok': 1.0}

另一种方法是使用 eval() 函数将 Javascript 传递给 MongoDB:

>>> client.admin.eval(
"db.runCommand({'renameCollection':'db1.coll2', 'to':'db2.coll2'})")
{u'ok': 1.0}

我发现原始 Javascript 版本不太 Pythonic,但很有用,因为它允许我测试 MongoDB 功能,而无需启动 MongoDB shell。我也没有看到它在 PyMongo StackOverflow 问题上被提及太多,所以认为它值得包含在这里。

关于python - 如何使用 PyMongo 将集合从一个数据库复制到同一服务器上的另一个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42245112/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com