簡體   English   中英

MongoDB:查詢和返回嵌入式文檔列表

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

我檢查了這個SO問題這個 問題 ,但是它們並沒有真正滿足我的需求。 任何幫助是極大的贊賞。

如果希望它們位於數組中,則需要將它們添加到數組中:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM