我正在根据特定的EmbeddedDocument获取文档,但我不想在检索时获取所有的EmbeddedDocuments,只有匹配的EmbeddedDocument和主Document。
这是我的密码:
学校嵌入式文档
class School(EmbeddedDocument):
name = StringField(max_length=120)用户文档
class User(Document):
first_name = StringField(max_length=60, required=True)
last_name = StringField(max_length=60)
schools = EmbeddedDocumentListField(School)供餐文件:
user = User.objects.create(first_name="Rohit", last_name="Khatri")
user.schools = [
School(name="Auden High School")),
School(name="Baldwin Boys High School"),
School(name="Baldwin Girls High School"),
School(name="Aukamm Elementary School"),
School(name="Mason-Rice Elementary")
]
user.save()
user = User.objects.create(first_name="ABC", last_name="DEF")
user.schools = [
School(name="Little Harbor Elementary School")),
School(name="Aukamm Elementary School"),
School(name="Mason-Rice Elementary")
]
user.save()我使用这段代码,检索在schools字段中有特定学校的schools:
users = User.objects(school__match={"name": "Aukamm Elementary School"})我只想得到选定的学校,这是Aukamm Elementary School在学校领域。
接收
[
{
"first_name": "Rohit",
"last_name": "Khatri",
"schools": [
{
"name": "Auden High School"
},
{
"name": "Baldwin Boys High School"
},
{
"name": "Baldwin Girls High School"
},
{
"name": "Aukamm Elementary School"
},
{
"name": "Mason-Rice Elementary"
}
]
},
{
"first_name": "ABC",
"last_name": "DEF",
"schools": [
{
"name": "Little Harbor Elementary School"
},
{
"name": "Aukamm Elementary School"
},
{
"name": "Mason-Rice Elementary"
}
]
}
]所需输出
[
{
"first_name": "Rohit",
"last_name": "Khatri",
"schools": [
{
"name": "Aukamm Elementary School"
}
]
},
{
"first_name": "ABC",
"last_name": "DEF",
"schools": [
{
"name": "Aukamm Elementary School"
}
]
}
]谢谢
发布于 2016-12-23 14:11:24
您可以在$filter函数中使用aggregate运算符
users = User.objects(school__match={ "name": "Aukamm Elementary School" }).aggregate(
{ "$project": {
"first_name": 1,
"last_name": 1,
"schools": {
"$filter": {
"input": "$schools",
"as": "school",
"cond": { "$eq": [ "$$school.name", "Aukamm Elementary School" ] }
}
}
} }
)https://stackoverflow.com/questions/41300524
复制相似问题