Mongodb 多层次过滤数据

问题描述

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

import Foundation

struct Holidays : Codable {
   var holidays : [HolidayDetails]
}
struct HolidayDetails : Codable {
   var name : String
   var date : String
}

想要的结果: _id 为 z 的员工的开始大于 x 且结束小于 y 的事件列表。

现在我正在尝试:

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

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

解决方法

这会起作用

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...