[英]Query object and return embedded documents that the `_id` field is not part of a list
[英]MongoDB: Query For and Return List of Embedded Documents
我有几个solutions
,可以solutions
多个projects
。 我通过embedding
项目embedding
解决方案文档中为这种关系建模,例如
[{
_id: "1",
solutionTitle: "Some Test Solution",
projects: [
{
_id: "12",
type: "Java",
title: "Test Project"
},
{
_id: "13",
type: "Misc",
title: "Test Project"
}
]
},
{
_id: "2",
solutionTitle: "A Different Solution",
projects: [
{
_id: "21",
type: "Java",
title: "Another Java Project"
}
]
}]
现在,我想select all projects
特殊类型的select all projects
,例如Java
。 我用聚合尝试了以下query
:
db.Solutions.aggregate (
{ "$unwind": "$projects" },
{ "$match": {"projects.type": "Java" } },
{ "$project": {"projects" : 1, "_id": 0, "solutionTitle": 0 } }
)
这工作正常,但结果与我预期的不一样。 我懂了
{
projects: {
_id: "12",
type: "Java",
title: "Test Project"
},
projects: {
_id: "21",
type: "Java",
title: "Another Java Project"
}
}
我如何获得结果作为项目列表,例如
[
{ _id: "12", type: "Java", title: "Test Project" }
...
]
如果希望它们位于数组中,则需要将它们添加到数组中:
db.Solutions.aggregate ([
{ "$unwind": "$projects" },
{ "$match": {"projects.type": "Java" } },
{ "$group": {"_id": null, "projects": { "$push": "$projects" } } }
])
根据下面的评论,您似乎真正想要的是返回项目子文档,就像它们是您正在搜索的文档一样。 在这种情况下,您应该$project
明确显示项目值:
db.Solutions.aggregate ([
{ "$unwind": "$projects" },
{ "$match": {"projects.type": "Java" } },
{ "$project": {"_id": "$projects._id", "type": "$projects.type", "title": "$projects.title" } }
])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.