我有几个解决方案
,它们在任期内可能包含多个项目
。我通过在解决方案文档中嵌入
项目来建模这种关系,例如
[{
_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"
}
]
}]
现在我想选择特殊类型的所有项目
,例如Java。我尝试了以下带有聚合的查询
:
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" }
...
]
我检查了this SO question和 this one ,但它们并没有真正满足我的需要。非常感谢任何帮助。
最佳答案
如果您希望它们位于数组中,则需要将它们添加到数组中:
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" } }
])
关于javascript - MongoDB:查询并返回嵌入文档列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28169660/