如何解决将带有Unix时间戳的字段转换为日期Mongodb / NodeJS
我在MongoDB中使用汇总将字段按年,月和月日分组。
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字段,但是当我尝试使用$ date(在Unix时间戳中具有日期)时,会引发错误。
我尝试了什么?
Transaction.aggregate(
[{
$group: {
_id: {
year : { $year : new Date("$date") },month : { $month : new Date("$date") },day : { $dayOfMonth : new Date("$date") },count: { $sum: 1 }
}
}
]).then( res => console.log(res));
但这没有用,因为“ $ date”作为字符串传递给Date构造函数。有任何解决方法吗?
解决方法
您可以使用$toDate进行操作,将unix时间戳毫秒转换为iso日期,
-
$addFields
转换createdAt
并替换值
{
$addFields: {
createdAt: { $toDate: "$createdAt" }
}
},
- 您可以直接在
$group
中使用
{
$group: {
_id: {
year: { $year: "$createdAt" },month: { $month: "$createdAt" },day: { $dayOfMonth: "$createdAt" }
}
}
}
游乐场:https://mongoplayground.net/p/-gWq0YLtLSX
您也可以在$group
内进行转换,但这将转换3次,而您可以添加一次并在上面的示例中分组使用。
year: { $year: { $toDate: "$createdAt" } },month: { $month: { $toDate: "$createdAt" } },day: { $dayOfMonth: { $toDate: "$createdAt" } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。