mongodb$dayOfYear等价于Unix纪元时间聚合

mongodb$dayOfYear等价于Unix纪元时间聚合,mongodb,aggregation-framework,Mongodb,Aggregation Framework,是否有一种按天对Unix纪元时间进行分组的方法,相当于$dayOfYear 或者是一个聚合浮点整数的过程(分为四分位数、百分位数、千分位数、%) 尽量避免使用map reduce,但举个例子就很好了。JavaScript有一个对象,可以用于任何服务器端JavaScript处理MapReduce函数 你似乎知道电话里的接线员。有两个用于处理日期的参数 除非您的需求非常具体,否则您应该使用聚合管道。它非常灵活,在大多数情况下比在mapReduce下运行的等效操作要快得多。通过使用$mod和$divi

是否有一种按天对Unix纪元时间进行分组的方法,相当于$dayOfYear

或者是一个聚合浮点整数的过程(分为四分位数、百分位数、千分位数、%)

尽量避免使用map reduce,但举个例子就很好了。

JavaScript有一个对象,可以用于任何服务器端JavaScript处理MapReduce函数

你似乎知道电话里的接线员。有两个用于处理日期的参数


除非您的需求非常具体,否则您应该使用聚合管道。它非常灵活,在大多数情况下比在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。完整的解释是为了有日期的其他人的利益,他们应该使用聚合管道。如果要使用聚合,则需要转换为日期。无论如何,它们实际上只是内部的大纪元。