mongodb - MongoDB 时间 小时和分钟的差异
问题描述
我有一个包含以下模式的文档的集合
{
"_id" : ObjectId("5f80656ce4e67b176f05fde5"),
"owner" : ObjectId("5f120ba1578d051b20fb53e3"),
"checkedInTime" : ISODate("2020-10-09T03:58:12.837-06:30"),
"checkedOutTime" : ISODate("2020-10-09T07:12:10.906-06:30"),
"punchIn" : true,
"punchOut" : true,
"isPresent" : true,
"punchStatus" : false,
"user" : {
"_id" : ObjectId("5f120ba1578d051b20fb53e3"),
"emp_code" : 82140,
"emp_firstname" : "rahul",
"emp_secondname" : "narayanan unni",
"emp_gender" : "Male",
"dept_name" : "office",
"avatar" : "src/assets/images/IMG-20180302-WA0025.jpg",
}
}
我想要一个包含时间差(checkedOutTime-checkedInTime)的持续时间字段,以小时、分钟和秒(即hh:mm:ss, 12:10:03
)为单位,我怎样才能在 mongodb 中获得它。
db.getCollection('logs').aggregate([
{
$project:{
_id:0,
In:"$checkedInTime",
Out:"$checkedOutTime",
Duration:{
$divide:[{$subtract: ["$checkedOutTime", "$checkedInTime"]},3600000]
/* i.e in hours,minute,&seconds (i.e hh:mm:ss, 12:10:03) */
},
Name : { $concat: [ "$user.emp_firstname"," ","$user.emp_secondname" ] },
EmpCode:"$user.emp_code",
Department:"$user.dept_name",
}
}
]}
刚接触mongodb请帮忙,谢谢
解决方案
一种可能性是:
db.collection.aggregate([
{
$set: {
Duration: {
$dateToString: {
date: {
$dateFromParts: {
year: 1970,
millisecond: { $subtract: [ "$checkedOutTime", "$checkedInTime" ] }
}
},
format: "%H:%M:%S"
}
}
}
}
])
请注意,它仅适用于少于 24 小时的持续时间。您可以使用$dayOfYear
366 天。但是,您必须减去 1 天,因此在这种情况下需要进行一些编码。
推荐阅读
- c# - 从 .json URL 获取数据 [Xamarin]
- python - 用户身份验证 is_active 错误标志在 Django 中不起作用
- jpa - 通过花时间从表中获取记录来休眠 jpa 订单
- macos - chmod 755 所有 Mach-O 可执行文件 - macosx
- swift - 添加约束后,放置在谷歌地图上的按钮消失 Xcode ios Swift
- apache - .htaccess 中的子域访问问题
- c# - 十进制是四倍精度吗?
- git - 在没有本地克隆的情况下更改 git 存储库远程的分支头?
- python - 使用带有地理定位的请求问题使用 python 进行 Webscraping
- python - Django 重命名/重构自定义用户模型