Từ những gì tôi hiểu trong câu hỏi của bạn (bạn thực sự cần cung cấp một vài tài liệu mẫu với lược đồ của mình) nếu Traitement
của bạn mô hình có cấu trúc sau, ví dụ:
/* 0 */
{
"_id" : 1,
"user" : "abc",
"dateEntre" : ISODate("2014-03-01T08:00:00.000Z"),
"dateSortie" : ISODate("2014-03-01T13:00:00.000Z")
}
/* 1 */
{
"_id" : 2,
"user" : "jkl",
"dateEntre" : ISODate("2014-03-01T08:00:00.000Z"),
"dateSortie" : ISODate("2014-03-01T10:30:00.000Z")
}
/* 2 */
{
"_id" : 3,
"user" : "jkl",
"dateEntre" : ISODate("2014-03-01T12:00:00.000Z"),
"dateSortie" : ISODate("2014-03-01T18:00:00.000Z")
}
Khung tổng hợp của bạn sẽ có một $project
hoạt động đường ống trong đó bạn nhận được sự khác biệt giữa hai ngày bằng cách sử dụng $subtract
toán tử và sau đó chuyển đổi sự chênh lệch ngày đó theo mili giây thành giờ bằng cách sử dụng $divide
nhà điều hành. Giai đoạn cuối cùng trong quy trình của bạn sẽ là sử dụng $group
toán tử để nhóm các tài liệu từ đường dẫn trước đó và $sum
chênh lệch ngày giờ:
Traitement.aggregate([
{
$project: {
user: 1,
dateDifference: {
$divide: [{
$subtract: [ "$dateSortie", "$dateEntre" ]
}, 1000*60*60
]
}
}
},
{
$group: {
_id: "$user",
total : {
$sum : "$dateDifference"
}
}
}
])
Kết quả:
/* 0 */
{
"result" : [
{
"_id" : "jkl",
"total" : 8.5
},
{
"_id" : "abc",
"total" : 5
}
],
"ok" : 1
}