Mongodb 项目在 object 数组内,数组 object

Mongodb project inside array of object with array of object

MongoDB

我有这样的数据:-

[
  {
    review: [
      {
        title: "Title1",
        professor: [
          {
            id: "1",
            accept: false
          },
          {
            id: "2",
            accept: false
          }
        ]
      }
    ]
  },
  {
    review: [
      {
        title: "Title2",
        professor: [
          {
            id: "3",
            accept: false
          },
          {
            id: "2",
            accept: false
          }
        ]
      }
    ]
  }
]

我想要标题和教授数组以及特定 ID 的过滤器(例如“1”) 我的代码:- 为了匹配我使用下面的代码并且它工作得很好

$匹配

{
      review: {
        $elemMatch: {
          professor: {
            $elemMatch: {
              id: "1"
            }
          }
        }
      }
}

对于我使用以下代码的项目

$项目

{
      review: {
        title:1,
        professor:{
          $filter:{
            input: "$review.professor",        (I try only professor but give null)
            as: "professor",
            cond: {$eq:["$$professor.id",  "1" ]}
          }
        }
      }
    }

问题是教授显示数组但数据为空

Playground

放松阶段可以帮到你。

db.collection.aggregate([
  {
    "$match": {
      review: {
        $elemMatch: {
          professor: {
            $elemMatch: {
              id: "1"
            }
          }
        }
      }
    }
  },
  {
    "$unwind": "$review"
  },
  {
    $project: {
      review: {
        title: 1,
        professor: {
          $filter: {
            input: "$review.professor",
            as: "professor",
            cond: {
              $eq: [
                "$$professor.id",
                "1"
              ]
            }
          }
        }
      }
    }
  }
])