是否可以使用pymongo将变量用于集合名称?

时间:2014-07-17 09:40:21

标签: python mongodb pymongo

是否可以使用pymongo将变量用于集合名称? 例如:

col = 'my_collection'
db.col.update()

3 个答案:

答案 0 :(得分:40)

您可以使用:

col = 'my_collection'
db[col].update()

reference

答案 1 :(得分:6)

您正在尝试从字符串中调用方法。这不是pymongo特有的。

您可以使用getattr查看字符串是否作为db对象上的属性存在,然后调用它。

e.g。

my_collection = getattr(col, 'my_collection')
my_collection.update()

编辑:请注意,在字符串不是col的方法或属性的情况下,使用getattr方法允许异常处理。

答案 2 :(得分:1)

Ashoka Lella的答案很完美。 另外一点是在烧瓶模型的类中有此语句。

__collection__="default"  #Any default collection, which may or may not be used by the application

仅仅是因为您的集合位于变量中,并不意味着您可以跳过集合属性的定义。我将代码粘贴到使用这种方式的地方。

class Collection(Document):
 __collection__ = "collection_1"
 structure = {
    "name": str,
    "email": str,
    "status": bool,
    "extra": dict
 }
 required_fields = ["name", "email"]    
 default_values = {"status": "inactive", "extra": {}}

 def insertDocument(self, data):
    print "model : " + data["collection"]
    db[data["collection"]].insert(data["data"])
    return "from model"

别忘了在db变量上注册您的类名- db.register([Collection])