将嵌套的集合元素作为Python中的对象返回

时间:2016-12-31 20:08:31

标签: python mongodb cherrypy

我已经使用Python在我的mongo数据库中插入了以下文档:

@cherrypy.expose
def create(self):
    client = MongoClient()
    db = client.database_name        
    result = db.users.insert_one({
        "email": "email@email.com",
        "company": {
            "name": "ABC Company"
        }
    })

现在,我使用变量(company_name)存储了集合查询的结果:

 @cherrypy.expose
 def result(self):
     client = MongoClient()
     db = client.database_name        
     cursor = db.users.find({"email":"email@email.com"})
     for document in cursor:
        email = document["email"]
        company_name = document["company"]["name"]
     return company_name

我想将嵌套元素作为对象返回,例如:company.name而不是变量(company_name)

如何修改结果函数以将集合结果存储为对象属性?

1 - 我使用CherryPy作为HTTP服务器。我没有使用任何ORM,也没有使用模板引擎。

1 个答案:

答案 0 :(得分:0)

使用namedtuple模块中的collections

from collections import namedtuple
company = namedtuple('company ', 'name') 
document = namedtuple('document ', 'email, company')

然后在循环内部:

for row in cursor:
    result = document(row["email"], company(row["company"]["name"]))
    yield result # or 'return result' if there is only one of them

namedtuple你会访问你的参数(但只读它因为它是一个元组)作为位置(通过索引[0],[1]等)和作为属性(result.email) 。所有属性也是只读属性,因此它们带有预先烘焙的fget函数,可以在mapfilter中使用。