[英]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.