【发布时间】:2020-08-27 04:30:31
【问题描述】:
我正在尝试使用 Flask 对两个 MongoDB 集合执行“内部连接”类似。
我认为我应该使用$lookup 来实现这一点,而我目前的路线是:
@app.route("/perfumes")
def perfumes():
perfumes = mongo.db.perfumes.find()
users = mongo.db.perfumes.aggregate(
[
{
"$lookup": {
"from": "mongo.db.users",
"localField": "author",
"foreignField": "username",
"as": "creator",
}
}
]
)
return render_template("perfumes.html", title="Perfumes", perfumes=perfumes, users=users)
在我的模板中,我正在遍历一个集合中的perfumes,并希望访问users 集合中的所有数据,因为每个香水项目都是由一个用户创建的。
perfumes 集合有一个 author 字段,应该用于链接 users 集合中的 username 字段。
我的模板的一个非常简化(精简)的版本如下所示:
% for perfume in perfumes %}
{{ perfume.name }}
Created by {{ <HERE I WANT TO HAVE MY ITEM CREATOR> }} on {{ perfume.date_updated.strftime('%d-%m-%Y') }}
{% endfor %}
为了让这个“join”正常工作并能够访问两个集合中该项目的所有数据,我缺少什么?
谢谢!!
注意:我想访问的不仅仅是创建者的用户名,比如个人资料图片等,这就是我需要加入的原因。
更新:这些是我用于两个数据库的结构:
{
"perfumes": {
"author": "<string>",
"brand": "<string>",
"name": "<string>",
"descritpion": "<text field>",
"date_updated": "<date>",
"public": "<boolean>",
"picture": "<string>"
},
"users": {
"username": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"is_admin": "<boolean>",
"avatar": "<string>"
}
}
所以perfumes 中的author 可以与users 中的username 链接。
【问题讨论】:
-
您能否发布您的收藏外观、少量文档和您的预期输出?
-
我刚刚更新了我的问题。所以基本上我想访问我模板中的每个项目,并访问其作者的所有数据,这些数据链接到
users中的username。Username是独一无二的。
标签: python mongodb flask flask-pymongo