分组前的偏移值

Offset value before grouping

我有几个项目,其中一个字段是基于 UTC 的 unix 时间戳乘以 1000,以便在保持 long(整数)值的同时包括毫秒。

{ 
    "title" : "Merkel 'explains' refugee convention to Trump in phone call", 
    "iso" : "2017-01-31T04:03:53.807+0000", 
    "id" : NumberLong(1485835433807)
}
{ 
    "title" : "NASA to Explore an Asteroid Containing Enough Mineral Wealth to Collapse the World Economy", 
    "iso" : "2017-01-30T23:20:27.327+0000", 
    "id" : NumberLong(1485818427327)
}
{ 
    "title" : "IMGKit: Python library of HTML to IMG wrapper", 
    "iso" : "2017-01-30T23:15:39.488+0000", 
    "id" : NumberLong(1485818139488)
}

iso 字段只是一个便于调试的文本字符串,没有其他用途。

我打算使用 中描述的方法对项目重新采样,创建每天的项目摘要,最初只是每天计数。

问题是时间戳("id" 字段)不能真正用于存档,因为 UTC 偏移量。根据用户的位置(或本地插入时间,即 00:30 星期一当地时间与 23:30 星期日 UTC 时间,如果时区为 +1h),项目将属于某一天或其他,因此该字段缺少此信息。

假设我只想在 "id" 字段中添加一个偏移量,即 3600000,即以毫秒表示的一小时,然后开始根据 "id" 字段对数据进行重新采样,我怎样才能在聚合管道中实现这个?

有没有办法让第一阶段采用 "id" 字段值,将 3600000 添加到该值并将其存储到 "id_offsetted" 字段中,然后我可以在该字段上执行下一个阶段?

3.4 之前的版本

   {$project: { 
        "title" :  1, 
        "iso" : 1
        "id" : 1,
        "id_offsetted" : {$add: ["$id", 3600000]}   
    } }

版本 3.4 以上

 {$addFields: {
        "id_offsetted" : {$add: ["$id", 3600000]}   
    } }