因此,我需要提取某些对象的星期几以进行一些聚合。但我的所有文件都是时间戳,而不是日期。所以我试图用$ 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类型一起使用,我的函数返回一个日期,那么出了什么问题呢?