我实际上是在尝试使用mongoengine和python管理多数据库连接。 因此,对于测试我已经安装了一个远程mongo服务器并且在本地。
测试期间使用的版本:
我使用以下命令在远程mongo上设置了一个用户:
remote $ mongo admin -u admin -p *** --port 7766
> use test
> db.addUser({user:"toto", pwd:"***", roles:["userAdminAnyDatabase", "readWrite"]})
我在想我在我正在使用的db上给予Read和Write(为了测试目的,我之前做了use test
,但我也用userAdminAnyDatabase给了很多权利不是吗? )
然后在mongo我试图插入然后选择,检查一切是否良好:
> db.test.insert({test:"toto"})
> db.test.find()
{ "_id" : ObjectId("54aace23659e51853a6bb3e4"), "test" : "toto" }
到目前为止一切似乎都很好,现在我使用mongoengine进入我的python脚本, 我正在尝试连接到我的数据库并在每个数据库中保存一些东西
from mongoengine import *
import mongoengine.connection
class Test(Document):
email = StringField(required=True)
class ConnectionTest(unittest.TestCase):
def test_double_connect(self):
c2 = connect("test", "remote", host="mongodb://******/", \
port=7766, username="toto", password="test")
a2 = Test()
a2.email = "remote@remo.te"
a2._meta['db_alias']="remote"
a2.save()
c = connect("test", "local", host="mongodb://localhost/")
a1 = Test()
a1.email = "TOTO_TEST_LOCAL@local.host"
a1._meta['db_alias']="local"
a1.save()
print c2.__dict__
print c.__dict__
如果我没有错,它应该有效,但我从mongoengine得到一个例外,说我无法在test.test中插入:
Error
Traceback (most recent call last):
File "/Users/lumy-meludia/Meludia/depends/mongoengine/tests/test_connection.py", line 33, in test_double_connect
a2.save()
File "/Users/lumy-meludia/Meludia/depends/mongoengine/mongoengine/document.py", line 354, in save
raise OperationError(message % unicode(err))
OperationError: Could not save document (not authorized for insert on test.test)
我的问题是,为什么这不起作用,但在mongo翻译中运作良好?
编辑: 重读文档后,有些问题与azure和LC_ALL = C有关 我发现故障在哪里,连接现在正在工作。
如果你想与mongoengine进行不同的mongodb交互,你似乎需要定义一个新类。