设置Mongo过滤器以获取在给定时间段内可用的项目

时间:2019-06-01 18:21:10

标签: javascript mongodb datetime mongoose query-optimization

我数据库中的项目具有多个保留的数组,这些数组由具有两个项目(开始和结束)的对象表示。 例如:

            "resa": [
                {
                    "_id": "5cf2a38372373620263c84f1",
                    "start": "2019-06-01T15:23:00.000Z",
                    "end": "2019-06-01T16:23:00.000Z"
                },
                {
                    "_id": "5cf2a3a772373620263c84f2",
                    "start": "2022-03-05T16:23:00.000Z",
                    "end": "2022-03-05T17:23:00.000Z"
                }
            ]

我的过滤器需要在给定开始和结束时间段后向我返回可用可用的对象。

我的尝试一直到:

  Room.find({
      $or: [
        { $and: [{ resa: { $elemMatch: { start: { $lt : req.query.start } } } },{ resa: { $elemMatch: { end: { $lt : req.query.start } } } }] },
        { $and: [{ resa: { $elemMatch: { start: { $gt : req.query.end } } } },{ resa: { $elemMatch: { end: { $gt : req.query.end } } } }] }
      ]
    },

我的逻辑是,对于给定resa中每个项目的每个开始和结束日期:

  • 请求的开始低于每个注册的开始请求的结束低于每个注册的开始

  • 请求的开始大于每个注册的结束,并且请求的结束大于每个注册的结束

在给定的时间段我的房间可用。

我是否错过了一些$ query运算符在mongo中的功能,还是存在一种更合理的方法来应用此过滤器?

0 个答案:

没有答案