我如何获得独特的订票柜台?就像如果我将日期从“ 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"
}
])
我不需要唯一的 _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
}
]