javascript - 如何在mongodb中计算总和

标签 javascript node.js mongodb mongoose mongodb-query

你好,我有这种类型的收藏。

[{
    "_id" : ObjectId("5d7e56cc61f05d22ff7ee318"),
    "Emp No" : "0088P2C",
    "Emp Name" : "MANISHA JHA",
    "Card No" : "2076",
    "Department" : "THBS",
    "Att Date" : "03-Jun-2019",
    "In Time" : "03-Jun-2019 10:53",
    "Out Time" : "03-Jun-2019 18:13",
    "Status" : "P       ",
    "Late By " : "01:53",
    "Early By " : "00:00",
    "Total Hour" : "07:20",
    "OT Hour" : "00:00",
    "Location" : "Consolidated",
    "id" : "1c4bdbcd0f57c17a7160697266e9b371"
},
{
    "_id" : ObjectId("5d7e56cc61f05d22ff7ee319"),
    "Emp No" : "0088P2C",
    "Emp Name" : "MANISHA JHA",
    "Card No" : "2076",
    "Department" : "THBS",
    "Att Date" : "04-Jun-2019",
    "In Time" : "04-Jun-2019 09:50",
    "Out Time" : "04-Jun-2019 15:33",
    "Status" : "P       ",
    "Late By " : "00:50",
    "Early By " : "02:27",
    "Total Hour" : "05:43",
    "OT Hour" : "00:00",
    "Location" : "Consolidated",
    "id" : "a54e78844d0c27bd15607feb50aa272b"
}]

我想计算总小时数。我这样查询聚合员工并得到它的总小时数

await Attendance.aggregate(
            [
                {$match: {Department: "THBS"}},
                {
                    $group: {
                        _id: '$Emp No',
                        totalTime: {$sum: "$Total Hour"},
                        data: {$addToSet: {attendance: "$Att Date", Status: "$Status", id: "$id"}}
                    }
                },
                {$project: {'Emp No': '$_id', _id: 0, data: 1, totalTime: 1}}
            ])

当前 total hour 来自此查询的 0。预计应该是 12.63

最佳答案

尝试使用 $toInt 将以字符串形式存储的 Total Hour 转换为分钟数, $substr$multiply .然后你可以$sum该值并使用 $divide 转换回小时数:

db.collection.aggregate([
    {$match: {Department: "THBS"}},
    {
        $addFields: {
        TotalMinutes: {
            $add: [ 
                { $toInt: { $substr: [ "$Total Hour", 3, 2 ] } },
                { $multiply: [ { $toInt: { $substr: [ "$Total Hour", 0, 2 ] } }, 60 ] }
            ]
        }
        }
    },
    {
        $group: {
            _id: '$Emp No',
            totalTime: {$sum: "$TotalMinutes"},
            data: {$addToSet: {attendance: "$Att Date", Status: "$Status", id: "$id"}}
        }
    },
    {
        $project: {
            'Emp No': '$_id', 
            _id: 0, 
            data: 1, 
            totalTime: { $add: [ 
                { $toInt: { $divide: [ "$totalTime", 60 ] } },
                { $divide: [ { $mod: [ "$totalTime", 60 ] }, 100 ] }
                ]
            }
        }
    }
])

Mongo Playground

编辑:在这种情况下,12.63 等于 13 小时 3 分钟

关于javascript - 如何在mongodb中计算总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57949094/

相关文章:

javascript - 如何使用 Javascript 或 jQuery 在 div 中呈现 html 代码

javascript - 服务器路径的流程

javascript - nodejs fs.exists()

node.js - 如何在本地主机:27017 in window?上连接mongodb

javascript - 在 Firebase 上登录后的路由

javascript - 根据所选单选按钮显示详细信息

javascript - SIP CANCEL 请求永远不会收到 200 取消响应

node.js - 如何在docker compose secret中使用主目录中的文件?

python - mongodb游标id无效错误

java - 如何在Java中使用DAO访问DB