Конвертировать дату из миллисекунд в объект ISODate

Я пытаюсь агрегировать записи в объединении MongoDB по часам, и мне нужно преобразовать дату, хранящуюся в виде метки времени (миллисекунды), в ISODate, чтобы я мог использовать встроенные в агрегированные операторы даты ($ час, $ месяц и т. Д.)

Записи хранятся как

{ 
"data" : { "UserId" : "abc", "ProjId" : "xyz"}, 
"time" : NumberLong("1395140780706"),
"_id" : ObjectId("532828ac338ed9c33aa8eca7") 
} 

Я пытаюсь использовать агрегированный запрос следующего типа:

db.events.aggregate(
    { 
       $match : { 
         "time" : { $gte : 1395186209804, $lte : 1395192902825 } 
       } 
    }, 
    { 
       $project : {
         _id : "$_id", 
         dt : {$concat : (Date("$time")).toString()} // need to project as ISODate
       } 
    },
    // process records further in $project or $group clause
)

который дает результаты в виде:

{
    "result" : [
        { 
            "_id" : ObjectId("5328da21fd207d9c3567d3ec"), 
            "dt" : "Fri Mar 21 2014 17:35:46 GMT-0400 (EDT)" 
        }, 
        { 
            "_id" : ObjectId("5328da21fd207d9c3567d3ed"), 
            "dt" : "Fri Mar 21 2014 17:35:46 GMT-0400 (EDT)" 
        }, 
            ... 
} 

Я хочу извлечь часы, день, месяц и год из даты, но так как время проецируется в виде строки, я не могу использовать встроенные операторы даты агрегированного фреймворка ($ час и т. Д.).

Как я могу преобразовать время из миллисекунд в дату ISO, чтобы сделать что-то вроде следующего:

db.events.aggregate(
    {
        $match : { 
            "time" : { $gte : 1395186209804, $lte : 1395192902825 } 
        }
    },
    {
        $project : {
            _id : "$_id",
            dt : <ISO date from "$time">
        }
    },
    { 
        $project : {
            _id : "$_id",
            date : { 
                hour : {$hour : "$dt"} 
            }
        }
    }
)

Ответы на вопрос(4)

Ваш ответ на вопрос