Node.js 将带有Unix时间戳的字段转换为日期(Mongodb/NodeJS)
我在MongoDB中使用聚合按$year、$month和$dayOfMonth对字段进行分组Node.js 将带有Unix时间戳的字段转换为日期(Mongodb/NodeJS),node.js,mongodb,Node.js,Mongodb,我在MongoDB中使用聚合按$year、$month和$dayOfMonth对字段进行分组 Transaction.aggregate( [{ $group: { _id: { year : { $year : "$createdAt" }, month : { $month : "$createdAt"
Transaction.aggregate(
[{
$group: {
_id: {
year : { $year : "$createdAt" },
month : { $month : "$createdAt" },
day : { $dayOfMonth : "$createdAt" },
},
totalQuantity: {
$sum: "$totalQuantity"
},
totalAmount: {
$sum: "$totalAmount"
},
totalPayment: {
$sum: "$totalPayment"
},
count: { $sum: 1 }
}
}
]).then( res => console.log(res));
在上面的代码中,我使用的是默认的$createdAt字段,但是当我尝试使用在Unix时间戳中包含日期的$date时,它会抛出一个错误
我试过什么
Transaction.aggregate(
[{
$group: {
_id: {
year : { $year : new Date("$date") },
month : { $month : new Date("$date") },
day : { $dayOfMonth : new Date("$date") },
},
totalQuantity: {
$sum: "$totalQuantity"
},
totalAmount: {
$sum: "$totalAmount"
},
totalPayment: {
$sum: "$totalPayment"
},
count: { $sum: 1 }
}
}
]).then( res => console.log(res));
但这不起作用,因为“$date”作为字符串传递给日期构造函数。任何解决方法?您可以使用,将unix时间戳毫秒转换为iso日期
转换$addFields
并替换值createdAt
- 您可以直接在
$group
$group
内部进行转换,但这将转换三次,您可以添加一次,并在组中使用,如上面的示例所示
year: { $year: { $toDate: "$createdAt" } },
month: { $month: { $toDate: "$createdAt" } },
day: { $dayOfMonth: { $toDate: "$createdAt" } }
{
$group: {
_id: {
year: { $year: "$createdAt" },
month: { $month: "$createdAt" },
day: { $dayOfMonth: "$createdAt" }
}
}
}
year: { $year: { $toDate: "$createdAt" } },
month: { $month: { $toDate: "$createdAt" } },
day: { $dayOfMonth: { $toDate: "$createdAt" } }