Mongodb 无法将$dayOfMonth聚合与表达式一起使用

Mongodb 无法将$dayOfMonth聚合与表达式一起使用,mongodb,mongodb-query,Mongodb,Mongodb Query,因此,我需要提取一些对象的星期几来进行聚合。但我所有的文件都有时间戳,而不是日期。所以我试图用$dayOfMonth(和其他)来表示,我不知道它有什么不起作用 这是我的查询(以及从时间戳创建日期的帮助函数): 问题似乎在于将$timestamp的值传递给myDate函数。如果我使用一个文本(例如1492430243)作为函数中ts的值,或者作为传递给myDate的参数值,则可以正常工作 换句话说:这个$dayOfMonth:myDate(“1492430243”)有效 虽然一个解决方案在这里被证

因此,我需要提取一些对象的星期几来进行聚合。但我所有的文件都有时间戳,而不是日期。所以我试图用$dayOfMonth(和其他)来表示,我不知道它有什么不起作用

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

问题似乎在于将
$timestamp
的值传递给
myDate
函数。如果我使用一个文本(例如1492430243)作为函数中
ts
的值,或者作为传递给
myDate
的参数值,则可以正常工作

换句话说:这个
$dayOfMonth:myDate(“1492430243”)
有效


虽然一个解决方案在这里被证明是有效的(如果我可以补充的话,这是一个相当丑陋的解决方案),但我想知道为什么我的解决方案不起作用。根据mongodb文档,
$dayOfMonth
使用日期类型,我的函数返回一个日期,那么有什么问题吗?

看起来聚合框架不评估JavaScript。看看这个:从聚合框架来看,这似乎是一个相当不稳定的行为,因为在$match中,它可以毫无问题地工作,但对于$project来说却不是这样。我想知道其他部分是否也会发生这种情况。投票决定重新打开。看起来聚合框架不评估JavaScript。看看这个:从聚合框架来看,这似乎是一个相当不稳定的行为,因为在$match中,它可以毫无问题地工作,但对于$project来说却不是这样。我不知道其他部分是否也会发生这种情况。投票决定重新开放。
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;
}