我有几个项目,其中一个字段是基于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
字段只是一个文本字符串,以方便调试,它没有其他用途。
我打算使用https://stackoverflow.com/a/26550803/277267中描述的方法重新取样项目,每天创建项目摘要,最初只计算每天的项目数。
问题在于,由于UTC偏移,时间戳("id"
字段)无法真正用于实现此目的。根据用户的位置(或本地插入时间,即星期一当地时间00:30对比星期日UTC时间23:30,如果时区为+ 1h),项目将属于一天或另一天,因此field缺乏此信息。
假设我只想在"id"
字段中添加一个偏移量,即3600000,即以毫秒为单位表示的一小时,然后开始根据"id"
字段重新采样数据,怎么能我在聚合管道中实现了这个目标吗?
有没有办法让第一个阶段获取"id"
字段值,将3600000添加到该值并将其存储到"id_offsetted"
字段中,然后我可以在其中执行下一个阶段?
答案 0 :(得分:1)
3.4之前的版本
{$project: {
"title" : 1,
"iso" : 1
"id" : 1,
"id_offsetted" : {$add: ["$id", 3600000]}
} }
3.4版以后
{$addFields: {
"id_offsetted" : {$add: ["$id", 3600000]}
} }