Mongodb ограничивает $ first $ last на 60 минут? - PullRequest
0 голосов
/ 01 марта 2019

Итак, у меня есть документ, содержащий временные метки и некоторые другие данные.

Мне нужно получить разницу во времени между первой записью в $ и последней записью в $.Однако из-за природы этого, когда первая и последняя запись идут более 1 часа, вместо этого они должны рассматриваться как новый «сеанс».В противном случае я получу метки времени, которые будут продолжаться много часов между первым и последним.

Это то, что у меня так далеко.

  pipeline = [
        {"$sort": {"time": -1}},
        {
            "$group": {"_id":
                       {
                           "mac": "$mac",
                           "day": {"$dayOfMonth": {"date": '$time', "timezone": 'UTC'}},
                                                              "minute": {
                                   "$subtract": [
                                       {"$minute": "$time"},
                                       {"$mod": [{"$minute": "$time"}, 60]}
                                   ]
                               }
                       },
                       "lastSeen": {"$first": "$time"},
                       "firstSeen": {"$last": "$time"},
                       }
        },

        {
            "$project":
            {
                "_id": 1,
                "lastSeen": 1,
                "firstSeen": 1,
                "minutes":
                {
                    "$trunc":
                    {
                        "$divide": [{"$subtract": ["$lastSeen", "$firstSeen"]}, 60000]
                    }
                },

            }
        },

        {
            "$facet": {
                "0-5": [
                    {"$match": {"minutes": {"$gte": 0, "$lte": 5}}},
                    {"$count": "total"},
                ],
                "5-10": [
                    {"$match": {"minutes": {"$gte": 5, "$lte": 10}}},
                    {"$count": "total"},
                ],
                "10-20": [
                    {"$match": {"minutes": {"$gte": 10, "$lte": 20}}},
                    {"$count": "total"},
                ],
                "20-25": [
                    {"$match": {"minutes": {"$gte": 20, "$lte": 25}}},
                    {"$count": "total"},
                ],
                "25+": [
                    {"$match": {"minutes": {"$gt": 25}}},
                    {"$count": "total"},
                ],
            }
        },
        {"$project": {
            "result": {"$objectToArray": "$$ROOT"}
        }
        },
        {
            "$unwind": "$result"
        },
        {
            "$unwind": "$result.v"
        },
        {
            "$project": {
                "timeframe": "$result.k",
                "count": "$result.v.total"
            }
        },

        # {"$sort": SON([("_id", -1)])}

    ]
...