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