MongoDB:如何仅获取嵌套数组文档中的特定字段

时间:2019-07-09 16:54:44

标签: mongodb mongodb-query aggregation-framework mongo-shell

我正在尝试从嵌套数组文档中以以下格式投影值。我希望仅显示在查找查询中选择的特定specValue中的specType

{
    "carId": "345677"
    "car" : {
        "model" : [ 
            {
                "specs" : [ 
                    {
                        "specType": "SEDAN"
                        "specValue" : "1"
                    }, 
                    {
                        "specType": "BR_INC"
                        "specValue" : "yes"
                    }, 
                    {
                        "specType": "PLAN"
                        "specValue" : "gold"
                    }
                ]
            }
        ]
    }
}
  

这是我尝试过的。

db.cars.find({carId:'345677','car.model.specs.specType':'SEDAN'},{'car.model.specs.specValue':1})

这种方法为我提供了全部specValues,如下所示。

{
    "carId": "345677"
    "car" : {
        "model" : [ 
            {
                "specs" : [ 
                    {
                        "specValue" : "1"
                    }, 
                    {
                        "specValue" : "yes"
                    }, 
                    {
                        "specValue" : "gold"
                    }
                ]
            }
        ]
    }
}

我该如何授予获得这样正确格式的权利。谁能帮忙。

{
    "carId": "345677"
    "car" : {
        "model" : [ 
            {
                "specs" : [ 
                    {
                        "specType": "SEDAN"
                        "specValue" : "1"
                    }
                ]
            }
        ]
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下汇总

db.collection.aggregate([
  { "$project": {
    "car": {
      "model": {
        "$filter": {
          "input": {
            "$map": {
              "input": "$car.model",
              "in": {
                "specs": {
                  "$filter": {
                    "input": "$$this.specs",
                    "cond": { "$eq": ["$$this.specType", "SEDAN"] }
                  }
                }
              }
            }
          },
          "cond": { "$ne": ["$$this.specs", []] }
        }
      }
    }
  }}
])