Можно ли использовать переменную для имени коллекции с помощью pymongo?

Можно ли использовать переменную для имени коллекции с помощью pymongo? Например:

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

person ehsan shirzadi    schedule 17.07.2014    source источник


Ответы (3)


Вы можете использовать:

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

ссылка

person Ashoka Lella    schedule 17.07.2014

Вы пытаетесь вызвать метод из строки. Это не относится к пимонго.

Вы можете использовать getattr, чтобы увидеть, существует ли строка как атрибут вашего объекта db, а затем вызвать ее.

e.g.

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

редактировать: обратите внимание, что использование подхода getattr позволяет обрабатывать исключения в случае, если строка не является методом или атрибутом col.

person Community    schedule 17.07.2014

Ответ Ашоки Леллы идеален. Одним из дополнений к этому является наличие этого оператора в классе вашей модели фляги.

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

Тот факт, что ваша коллекция находится в переменной, не означает, что вы можете пропустить определение атрибута collection. Я вставляю свой код ниже, где я использовал этот способ.

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])

person Ninad Kulkarni    schedule 28.07.2018