数组对象中的 $elemMatch 与 $in 和 $exist

$elemMatch in array object with $in and $exist

  [{
    _id: 6231cbafee8a3b08abb4ae67,
    jadwal: {
      _id: 6231cb8bbf823408b62f7280,
      paket: [
             paket : 6225ae9ac883840368c290cb
             show_total_question:10
             token:"TPKTGO"
             },
             {
             paket : 616ee502a022be00116121c5
             show_total_question:10
             token:null
             }],
    },
    paket: {
      _id: 6225ae9ac883840368c290cb,
    }
  },
  {
    _id: 616ef62ca022be00116121df,
    jadwal: {
      _id: 616eee195e09f600183a267b,
      paket: [
             paket : 616ee3f32a30160019829bc1
             show_total_question:10
             },
             {
             paket : 616f12c7d2a514003018831f
             show_total_question:10
             token:"KQABIN"
             }],
    },
    paket: {
      _id: 616ee3f32a30160019829bc1,
    }
  },
]

首先,我从对 jadwal 和 paket 的聚合 $lookup 引用中获得了这两个样本数据。 我必须过滤数据,例如将 paket._id 与 jadwal.paket.paket 匹配,然后尝试检查令牌是否不存在或是否具有值 [null,""]。所以我希望的输出是

 {
        _id: 616ef62ca022be00116121df,
        jadwal: {
          _id: 616eee195e09f600183a267b,
          paket: [
                 paket : 616ee3f32a30160019829bc1
                 show_total_question:10
                 },
                 {
                 paket : 616f12c7d2a514003018831f
                 show_total_question:10
                 token:"KQABIN"
                 }],
        },
        paket: {
          _id: 616ee3f32a30160019829bc1,
        }
   }

因为在paket._id中有token.value在jadwal.paket.token中不存在。此数据的条件是 paket._id 总是在 jadwal.paket.paket 中有副本或相同的值 我在聚合的下方使用此代码

{'jadwal.paket':{'$elemMatch':{'paket':'$pakets._id','token':{$exists:false}

但似乎不起作用,或者我做错了? 请帮助我

我得到了答案 首先你必须放松 jadwal.paket 然后使用 $expr 作为过滤器