对于下面的示例数据,我试图找到具有冲突计划的人数(userID)。冲突的计划表示任何在开始和结束之间重叠的计划。
{
"_id": "1",
"userID": "123",
"start": "1",
"end": "5"
}, {
"_id": "2",
"userID": "123",
"start": "4",
"end": "5"
}, {
"_id": "3",
"userID": "124",
"start": "1",
"end": "5"
}, {
"_id": "4",
"userID": "124",
"start": "7",
"end": "8"
}
在上面的示例中,userID 123具有冲突的计划,因为start1:1,end1:5和start2:4,end2:5重叠。没有其他用户有重叠的日程安排。因此,计划冲突的用户总数为1.另外需要注意的是,用户可能在数据中有任意数量的计划。
到目前为止,我的尝试一直是使用mongodb的聚合将一个用户ID的所有开始和结束分组到一个地方。
[{
"$group": {
"_id": "$userID",
"schedules": {
"$push": {
"start": "$start",
"end": "$end"
}
}
}
}]
这是我得到的结果的格式。
{
"schedules": [
{
"start": 1,
"end": 5
},
{
"start": 4,
"end": 5
}
],
"_id": "123"
}
现在我需要检查每个用户ID的计划冲突并计算有冲突的用户数。