javascript - MongoDB:查询并返回嵌入文档列表

标签 javascript mongodb

我有几个解决方案,它们在任期内可能包含多个项目。我通过在解决方案文档中嵌入项目来建模这种关系,例如

[{
    _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 questionthis 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/

相关文章:

javascript - 对数组进行排序而不重绘内容

javascript - 如何在 jQuery 中第二次单击时删除类

javascript - 即使有足够的空间,div 也不会移动

Javascript 尝试使用 string.replace() 和正则表达式作为列表值

node.js - 将 Json 对象存储在 Mongoose 字符串键中

Python如何将关系数据放入mongodb+gridfs

javascript - Angular State Provider 抛出无法解决状态错误

regex - MongoDB正则表达式匹配问题

node.js - 在 Mongoose 中添加和删除

mongodb - 从嵌套数组 golang mongodb 中删除元素