如何使用xxx[dbname?]形式的mongoengine

How to use mongoengine in the form of xxx[dbname?]

通过使用 pymongo,我可以像这样连接到 collection:

conn = pymongo.MongoClient()
db = conn.example
collection = db.col

然后,我可以连接到名为 "example" 和 collection 的数据库,名为 "col"。

而且我还可以写出像blow这样的代码:

dbname = 'example'
collectionName = 'col'
conn = pymongo.MongoClient()
db = conn[dbname]
connection = db[collectionName]

这两个代码块将做同样的事情。

现在,我使用 mongoengine 连接到 MongoDB,我有一个带有 collectionA 的数据库,我在名为 [=37= 的文件中还有一个 class ]:

class collectionA(Document):
    A=StringField()
    B= StringField()

所以我只能使用:

import model
x = model.collectionA.object()

查询数据。

因为我有很多collection所以我想用

model[collectionName].object() 

查询数据,但是抛出异常,好像mongoengine不支持model[xxx]的形式连接collections.

那么,有什么办法可以解决这个问题吗?

您正在将 model.py 作为模块导入。方括号语法是对象上 getitem 方法的 "shortcut" 。 Because everything in python is an object,包括模块,你得到一个 TypeError 因为模块没有 getitem 方法。

您尝试实现的目标可以使用 inspect 模块完成:

import inspect

import model

collections = dict(inspect.getmembers(model, inspect.isclass))

collections[collectionName].object() 现在可以工作了。

FWIW 这似乎不是很 pythonic,mongoengine 的强大之处在于您将文档映射到明确定义的 classes,这似乎有点混淆了。这使得引入 hard-to-find 错误变得非常容易,并且还需要额外的击键,因为每个 class 现在都被引用为一个字符串。