0

我有一个员工集合,其中包含员工数据和一些带有开始和结束时间的事件......我想查询数据以便根据事件的开始和结束获取特定员工事件的子集。

employees = [
  {
    _id: 5,
    events: [
      {
        start:5,
        end:10
      },
      {
        start:15,
        end:20
      },
      {
        start:21,
        end:26
      },
    ]
  },
  {
    _id: 6,
    events: [
      {
        start:3,
        end:10
      },
      {
        start:15,
        end:22
      },
      {
        start:23,
        end:26
      },
    ]
  }
]

期望的结果:对于 _id 为 z 的员工,开始大于 x 且结束小于 y 的事件列表。

现在我正在尝试:

db.employees.aggregate([
  { $match: {'_id': 5}},
  { $unwind: '$events'}, 
  { $match: {'events.start': 2}
]);

但我仍然无法使用 $gt/$lt 过滤子集。

4

1 回答 1

1

这将起作用

db.collection.aggregate([
  {
    $match: {
      "_id": 5,
    },
  },
  {
    $unwind: "$events"
  },
  {
    $match: {
      "events.start": {
        $gte: 15
      },
      "events.end": {
        $lte: 250
      }
    }
  }
])

它的工作示例。https://mongoplayground.net/p/smUNCxfzC_N

于 2021-03-22T11:53:34.710 回答