不能将$ dayOfMonth聚合与表达式一起使用

时间:2017-04-17 11:59:23

标签: mongodb mongodb-query

因此,我需要提取某些对象的星期几以进行一些聚合。但我的所有文件都是时间戳,而不是日期。所以我试图用$ dayOfMonth(和其他人)使用表达式,我无法弄清楚它是什么不起作用。

这是我的查询(以及从时间戳创建日期的辅助函数):

db.Logging.aggregate([
    {
        $match: {
            "timestamp": { $gte: dateToTimestamp("2017-04-10") }
        }
    },
    {
        $project: { 
            _id: 0,
            timestamp: "$timestamp",
            dia: { $dayOfMonth: myDate("$timestamp") }
        }
    }
])

function dateToTimestamp(str) {
    let d = new Date( str );
    return d.getTime() + d.getTimezoneOffset()*60*1000;
}

function myDate( ts) {
    var d = new ISODate();
    d.setTime( ts );
    return d;
}

问题似乎是将$timestamp的值传递给myDate函数。如果我使用文字(例如1492430243)作为函数内部ts的值或作为传递给myDate的参数值,它可以正常工作。

换句话说:这个$dayOfMonth: myDate("1492430243")有效。

虽然已经证明解决方案可以在这里工作(Mongodb aggregation by day based on unix timestamp - 一个非常难看的解决方案,如果我可以添加),我想知道为什么我的解决方案没有。根据mongodb文档,$dayOfMonth与Date类型一起使用,我的函数返回一个日期,那么出了什么问题呢?

0 个答案:

没有答案