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
}