代码之家  ›  专栏  ›  技术社区  ›  Harsh Patel Sam

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

  •  2
  • Harsh Patel Sam  · 技术社区  · 6 年前

    我怎样才能拿到唯一的订票柜台?比如,如果我从日期传递为“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"
        }
    ])
    

    编辑-1

    我不想要独一无二的 _身份证 。正如您在预订阵列中看到的,有两个预订日期从“1970-01-01”到“1970-01-05”(即一个是“1970-01-01”到“1970-01-02”,另一个是“1970-01-03”到“1970-01-05”),但两个预订日期不相同。所以当我询问时,它会给我 2. 作为伯爵。但实际上,根据我的要求,它只是一个,因为我想计算在我作为查询传递的时间段内完成了多少独特的预订。请参见下面的示例

    所以,如果我的保留数组是这样的,那么它将给我计数1作为(从日期传递为“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 回复  |  直到 6 年前