首页 > 解决方案 > Mongodb在查询时仅从文档中获取匹配的对象

问题描述

我有一个来自 mongoimport 的 mongodb 数据库,看起来像这样

{
"_id" : ObjectId("5c209db2f6ba74c0f93709b7"),
"issues" : [ 
    {
        "id" : 20393,
        "project" : {
            "id" : 309,
            "name" : "Name 1"
        }
    },
    {
        "id" : 30392,
        "project" : {
            "id" : 250,
            "name" : "Name 2"
        }
    }
]

}

我使用这个查询:

db.tickets.find({"issues.project.id":309})

它将整个文档返回给我。我尝试使用

db.tickets.find( { "issues.project.id":309  }, {"issues":1} )

但是我得到了同样的东西,或者我只想要列表中匹配的对象而不是整个文档。

是否可以在 mongodb 中或者我应该更新数据库的结构?

谢谢大家

标签: mongodb

解决方案


如果查找字段不是唯一的,这是一种更安全的方法。我们用过滤后的版本“覆盖”原始issues数组:

db.foo.aggregate([
{$match: {"issues.project.id": 309}}
,{$project: { issues: { $filter: {
            input: "$issues",
            as: "z",
            cond: { $eq: [ "$$z.project.id", 309 ] }
        }}
}}

推荐阅读