MongoDB查询用于查找具有冲突计划的人数

时间:2018-05-03 15:01:59

标签: mongodb

对于下面的示例数据,我试图找到具有冲突计划的人数(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的计划冲突并计算有冲突的用户数。

0 个答案:

没有答案