在Mongo聚合管道中查找下一个文档

时间:2018-11-12 04:41:01

标签: mongodb aggregation-framework

我有一个包含以下文件的收藏集:

/* 1 */
{
    "_id" : "0017634ab72485cdd5f8afae7451c59f4274de49",
    "LicensePlateID" : "abc",
    "StartTimestamp" : "2018-09-14T23:01:25Z",
    "EndTimestamp" : "2018-09-14T23:01:25Z",
    "CameraID" : 23.0
}

/* 2 */
{
    "_id" : "0017c7495c2510a801b95be4e7a9a57fbd80106c",
    "LicensePlateID" : "abc",
    "StartTimestamp" : "2018-09-15T20:02:48Z",
    "EndTimestamp" : "2018-09-15T20:02:48Z",
    "CameraID" : 30.0
}

/* 3 */
{
    "_id" : "00222ee01cadd065ab7394b5da8e91ffe3297f44",
    "LicensePlateID" : "def",
    "StartTimestamp" : "2018-09-15T16:49:52Z",
    "EndTimestamp" : "2018-09-15T16:49:52Z",
    "CameraID" : 27.0
}

/* 4 */
{
    "_id" : "0025777e2fd9faf4c4c3b82981e76e67f9c097b7",
    "LicensePlateID" : "def",
    "StartTimestamp" : "2018-09-16T06:31:16Z",
    "EndTimestamp" : "2018-09-16T06:34:31Z",
    "CameraID" : 31.0
}

我想构建一个结果集,其中对于给定时间的每个车牌ID,我想找到下一个摄像机ID。与此同时,我想从当前时间戳中提取月,日和小时。以下是示例响应:

{
        "LicensePlateID" : "abc",
        "month_of_day" : 9,
        "day_of_week" : 14,
        "hour": 23,
        "CameraID" : 23.0,
        "NextCameraID" : 30.0
    }

{
        "LicensePlateID" : "def",
        "month_of_day" : 9,
        "day_of_week" : 15,
        "hour":16,
        "CameraID" : 27.0,
        "NextCameraID" : 31.0
    }

方法 我首先使用LicensePlateID和开始时间对整个集合进行排序。然后,我将LicensePlateID以及从开始时间和摄像机ID开始的年,月,日和小时分组。

问题

  1. 如何通过聚合获取响应中的下一个摄像机ID 管道?

  2. 如果对整个集合进行排序,这是一个好习惯吗? 馆藏巨大吗?我如何不分类即可获取下一个摄像机ID?

0 个答案:

没有答案