在 `$elemMatch` 中引用子文档的另一个字段

Referencing another field of subdocument in `$elemMatch`

我正在尝试在 $match 聚合阶段执行 $elemMatch,我想在该阶段查找子文档数组 (commitments) 中是否有文档 属性 tracksThisWeek 小于它的 frequency 属性,但我不确定如何引用相关子文档的另一个字段,我想出了:

{
    $match: {
        commitments: {
            $elemMatch: {
                tracksThisWeek: {
                    $lt: '$frequency',
                },
            },
        },
    },
},

我在集合中有一个文档应该从这个聚合中返回但不是,任何帮助都将不胜感激:)

这是做不到的,你不能引用查询语言中的任何字段,你可以做的是使用 $expr 和聚合运算符,如下所示:

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $gt: [
          {
            $size: {
              $filter: {
                input: "$commitments",
                cond: {
                  $lt: [
                    "$$this.tracksThisWeek",
                    "$$this.frequency"
                  ]
                }
              }
            }
          },
          0
        ]
      }
    }
  }
])

Mongo Playground