mongodb$dayOfYear等价于Unix纪元时间聚合
是否有一种按天对Unix纪元时间进行分组的方法,相当于$dayOfYear 或者是一个聚合浮点整数的过程(分为四分位数、百分位数、千分位数、%) 尽量避免使用map reduce,但举个例子就很好了。JavaScript有一个对象,可以用于任何服务器端JavaScript处理MapReduce函数 你似乎知道电话里的接线员。有两个用于处理日期的参数mongodb$dayOfYear等价于Unix纪元时间聚合,mongodb,aggregation-framework,Mongodb,Aggregation Framework,是否有一种按天对Unix纪元时间进行分组的方法,相当于$dayOfYear 或者是一个聚合浮点整数的过程(分为四分位数、百分位数、千分位数、%) 尽量避免使用map reduce,但举个例子就很好了。JavaScript有一个对象,可以用于任何服务器端JavaScript处理MapReduce函数 你似乎知道电话里的接线员。有两个用于处理日期的参数 除非您的需求非常具体,否则您应该使用聚合管道。它非常灵活,在大多数情况下比在mapReduce下运行的等效操作要快得多。通过使用$mod和$divi
除非您的需求非常具体,否则您应该使用聚合管道。它非常灵活,在大多数情况下比在mapReduce下运行的等效操作要快得多。通过使用$mod和$divide操作符,您几乎可以但不完全可以在聚合管道中使用Unix时间秒 数学是Unix time seconds/86400,用于将秒转换为天。然后,在一年中的某一天,模数为365.25(每4跳一次) 因此,使用秒数对$dayOfYear进行完全聚合几乎与
db.MyCollection.aggregate( {$project : {"day" : {$mod : [ {$divide : ["$unix_seconds", 86400] } , 365.25] } } }, { $group : { _id : "$day" , num : { $sum : 1 } } } , {$sort : {_id : 1}} )
上面添加了一年中连续日期的排序
问题是$mod运算符同时返回整数和余数。没有办法舍入或截断余数。因此,结果按整体和余数分组
{
"_id" : 235.1864887063916,
"num" : 1
},
{
"_id" : 235.24300889818738,
"num" : 1
},
{
"_id" : 235.60299520864623,
"num" : 3
},
{
"_id" : 235.66453935674085,
"num" : 1
},
{
"_id" : 235.79900382758004,
"num" : 1
},
{
"_id" : 235.80265845312474,
"num" : 1
},
。。显然,我们只想要整数
{
"_id" : 235,
"num" : 8
},
在mongo中,$trunc或modula只返回整个($modw),mod只返回剩余($modr)操作符会更好。是的。agg管道是我所寻求的。问题:数据被格式化为秒而不是DateTimes,这就是为什么我首先向您指出JavaScript的
Date
对象,该对象可以从历元时间构建。您无法将值强制转换为聚合中的日期类型,因此您将无法使用MapReduce。完整的解释是为了有日期的其他人的利益,他们应该使用聚合管道。如果要使用聚合,则需要转换为日期。无论如何,它们实际上只是内部的大纪元。