我已经使用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,也没有使用模板引擎。
答案 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
函数,可以在map
和filter
中使用。