根据日期获取唯一的预订数量

时间:2019-01-23 08:32:02

标签: node.js mongodb mongoose mongodb-query aggregation-framework

我如何获得独特的订票柜台?就像如果我将日期从“ 1970-01-01”传递到日期作为“ 1970-01-05”,那么它将仅返回1。因为有两个预订,但是日期不同(一个来自1970-01 -01到1970-01-02,另一个是从“ 1970-01-03”到“ 1970-01-05”)。

保留数组包含所有预订的房间,这些房间的日期

这是我的数据:

[
  {
    "_id": "5c0a17013d8ca91bf4ee7885",
    "name": "ABC",
    "reserved": [
      {
        "from": "1970-01-01",
        "to": "1970-01-02",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      },
      {
        "from": "2017-04-18",
        "to": "2017-04-23",
        "isCompleted": false
      },
      {
        "from": "2018-01-29",
        "to": "2018-01-30",
        "isCompleted": false
      }
    ]
  }
]

我尝试使用此查询获取计数,但它返回的所有计数都不唯一。

db.collection.aggregate([
    { $unwind: "$reserved" },
    {
        $match: { "reserved.from": { $lte: to }, "reserved.to": { $gte: from  } }
    },
    {
        $count: "total"
    }
])

EDIT-1

我不需要唯一的 _id 。就像您在预订数组中看到的那样,从日期“ 1970-01-01”到“ 1970-01-05”有两笔预订(即,一个是“ 1970-01-01”到“ 1970-01-02”,另一个是“ 1970-01-03”到“ 1970-01-05”),但两者的日期不同。因此当我查询时,它会给我 2 作为计数。但这实际上只是我的要求之一,因为我想计算在一段时间内作为查询传递的独特预订数。参见下面的示例

因此,如果我的保留数组是这样,它将为我提供1作为输出For(从日期传递为“ 1970-01-01”,而日期传递为“ 1970-01-05”)查询

"reserved": [
      {
        "from": "1970-01-01",
        "to": "1970-01-02",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      }
]

并且,如果我的保留数组是这样,它将为我提供计数2作为输出(从日期传递为“ 1970-01-01”,日期传递为“ 1970-01-05”)

"reserved": [
      {
        "from": "1970-01-01",
        "to": "1970-01-02",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      },
      {
        "from": "1970-01-03",
        "to": "1970-01-05",
        "isCompleted": false
      }
]

0 个答案:

没有答案