MongoDB - $ week函数和聚合中的第一天

Vol*_*kov 6 mongodb

我使用$ project运算符从Date中提取周部分,然后在聚合管道中按周进行分组.

{ $project: { 
    year: { $year: [ "$datetime" ] }, 
    week: { $week: [ "$datetime" ] }, 
    ....
    }
},
....
{ $group: { 
    _id: { 
        year: "$year", 
        week: "$week", 
        },
        .....
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我用它的$周运算符总是将星期日视为一周的第一天,我们使用星期一作为我们所在地的第一天.因此,按周分组的结果对我来说总是不正确的.有什么方法可以解决这个问题,或者已知的解决方法?

mongo跟踪系统中现有请求似乎一年多没有解决(是否真的很少需要选项?)欢迎任何可能的选择.也许有可能在javascript中创建一些自定义函数并在某处添加/替换它?

Sar*_*air 7

您可以使用以下管道根据您的要求修改$ week操作

[{ 
  $project: 
  {
    week: { $week: [ "$datetime" ] },
    dayOfWeek:{$dayOfWeek:["$datetime"]}
  }
},
{
  $project:
    {
      week:{$cond:[{$eq:["$dayOfWeek",1]},{$subtract:["$week",1]},'$week']}
    }
}]
Run Code Online (Sandbox Code Playgroud)

它的作用是在第一阶段它预测weekOfYear和dayOfWeek.在第二阶段,它检查dayOfWeek是否是星期日,如果是这样,那么它会修改一周到一周-1.然后,这将像周一开始一样运作.


小智 6

MongoDB中终于加入$isoWeek$isoWeekYear3.4将开始一周的星期一.

更多信息:https://docs.mongodb.com/manual/reference/operator/aggregation/isoWeek/