我正在尝试聚合mongodb中的数据,按用户分组和CET时间我的文档。根据文档,我尝试了以下内容:
db.WORKING_HOURS.aggregate(
[
{
$group : {
_id : { user : "$user", date : { $add: [ "$heure", 60*60000 ] }},
nombre: { $sum : 1 }
}
}
]
)
我的数据有以下形式:
{
"_id" : ObjectId("58b0b2bf32d3cd188cea9e1a"),
"user" : 1,
"heure" : ISODate("2017-02-24T22:25:03.180Z")
}
我无法正确汇总数据。我该如何解决这个问题?
答案 0 :(得分:0)
问题是我试图按日期分组,但时间不断变化,所以通常情况下,不可能对我的值进行分组,这也解释了为什么我要添加多个组。
要解决此问题,我使用$ dayOfWeek运算符(从日期开始)
结果:
[
{
$group : {
_id : {user : "$user", jour : {$dayOfYear : { $add: [ "$heure", 1000*60*60 ] }}},
nombre: { $sum : 1 }
}
}
答案 1 :(得分:0)
你的答案有几个问题。
您还没有将日光节省考虑在内 因为CET使用UTC + 1(标准时间)和UTC + 2(夏令时)。
$dayOfYear
会将多年的同一天值组合在一起。
你可以尝试下面的事情。
您可以将日期分为服务器时间并转换为CET时区,然后再将其呈现给用户。
在数据库中添加日期时,其他替代方法是添加偏移量。
像这样。
{
"date": ISODate("2017-02-24T00:00:00Z"),
"offsetmillis": 3600000
}
{
"date": ISODate("2017-03-27T00:00:00Z"),
"offsetmillis": 7200000
}
您可以使用以下聚合按日期分组。
{
$group: {
_id: {
date: {$dayOfMonth: {$add: ["$date", "$offsetmillis"]}},
month: {$month: {$add: ["$date", "$offsetmillis"]}},
year: {$year: {$add: ["$date", "$offsetmillis"]}}
},
count: {$sum: 1}
}
}