如何在同一个 mongodb 查询中使用 $unwind 和 $group

How do I use $unwind and then $group in the same mongodb query

我有以下 mongodb 结构...

[
    {
        track: 'Newcastle',
        time: '17:30',
        date: '22/04/2022',
        bookmakers: [
            {
                bookmaker: 'Coral',
                runners: [
                    {
                        runner: 'John',
                        running: true,
                        odds: 3.2
                    },
                    ...
                ]
            },
            ...
        ]
    },
    ...
]

我正在尝试为每个文档查找过滤器 bookmakers 数组,以仅包含与指定的 bookmaker 值匹配的对象,例如:

{ 'bookmakers.bookmaker': { $in: ['Coral', 'Bet365'] } }

目前,我正在使用以下 mongodb 查询仅针对 select 指定的博彩公司,但是我需要在将文件分开后将它们放回原处'$unwind',我可以使用 $group 来实现吗?

await HorseRacingOdds.aggregate([
    { $unwind: "$bookmakers" },
    {
        $group: {
            _id: "$_id",
            bookmakers: "$bookmakers"
        }
    },
    {
        $project: {
            "_id": 0,
            "__v": 0,
            "lastUpdate": 0
        }
    }
])

普通的 $addFields$filter 怎么样?

db.collection.aggregate([
  {
    "$addFields": {
      "bookmakers": {
        "$filter": {
          "input": "$bookmakers",
          "as": "b",
          "cond": {
            "$in": [
              "$$b.bookmaker",
              [
                "Coral",
                "Bet365"
              ]
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      "_id": 0,
      "__v": 0,
      "lastUpdate": 0
    }
  }
])

这里是Mongo playground供大家参考。