PyMongo - 从另一服务器克隆集合
我正在尝试用Python把一个远程服务器上的集合复制到我的本地电脑上,并且还要保留索引,因为我以后会用这个功能来自动化多个任务。从我了解到的情况来看,使用db.command是最好的方法,但我似乎无法让它正常工作,甚至不知道自己到底哪里出错了……这是我的代码和错误信息,任何帮助都非常感谢。
client = MongoClient()
db = clientProd.tools
colc = db.newDump
db.command({"cloneCollection": "databaseName.dump", "from": "example.com:6001"})
错误信息:
Traceback (most recent call last):
File "/Users/dustin/Git/redbull_dev/test.py", line 14, in <module>
dbProd.command({"cloneCollection": "databaseName.dump", "from": "example.com:6001"})
File "/Library/Python/2.7/site-packages/pymongo-2.6.3-py2.7-macosx-10.8-intel.egg/pymongo/database.py", line 396, in command
File "/Library/Python/2.7/site-packages/pymongo-2.6.3-py2.7-macosx-10.8-intel.egg/pymongo/helpers.py", line 147, in _check_command_response
pymongo.errors.OperationFailure: command {'from': 'example.com:6001', 'cloneCollection': 'databaseName.dump'} failed: no such cmd: from
[Finished in 5.2s with exit code 1]
2 个回答
1
我发现选中的解决方案似乎不太管用(可能是版本问题),于是我找到了自己的解决办法:
db_dest.command("cloneCollection", **{"cloneCollection": db_str + ".Sentence",
'collection': db_str + ".Sentence",
'from': mongodb_ip + ":27017"})
3
看起来你查看了Mongo的文档,但你应该看看pymongo的文档,地址是 http://api.mongodb.org/python/current/api/pymongo/database.html
根据那个文档,正确的命令应该是:
db.command("cloneCollection", collection="databaseName.dump", from="example.com:6001")
编辑
因为 from
是Python的一个关键字,所以我们可能需要创建一个字典并将其展开:
db.command("cloneCollection", **{'collection': "databaseName.dump", 'from': "example.com:6001"})