如何过滤子数组但保留根内容?

How to filter a sub array but keep the root content?

使用 mongo 3.6

我有一个顶级对象,其属性包含内容数组。


      {
        firstName: "first1",
        lastName: "last1",
        phones: [
          {
            name: "home",
            number: "1800"
          },
          {
            name: "work",
            number: "1888"
          }
        ]
      }

我只想 return 'work' phone 数字,但保留根内容。

预期结果为:

 {
        firstName: "first1",
        lastName: "last1",
        phones: [
          {
            name: "work",
            number: "1888"
          }
        ]
      }

用例是 return 服用特定药物的患者,但只有 return 这些药物,而不是完整的药物清单。

所以我尝试了这个:

 {
    $project: {
      phones: {
        $filter: {
          input: "$phones",
          as: "phones",
          cond: {
            $eq: [
              "$$phones.name",
              "work"
            ]
          }
        }
      }
    }
  }

我必须经常这样做以删除子数组的元素,因此我们将不胜感激。

以下查询可以获得预期的输出:

db.collection.aggregate([
    {
        $addFields:{
            "phones":{
                $filter:{
                    "input":"$phones",
                    "as":"phone",
                    "cond":{
                        $eq:["$$phone.name","work"]
                    }
                }
            }
        }
    }
]).pretty()

输出:

{
    "_id" : ObjectId("5d56d6c632ac518eee84d462"),
    "firstName" : "first1",
    "lastName" : "last1",
    "phones" : [
        {
            "name" : "work",
            "number" : "1888"
        }
    ]
}