Mongodb, group by datediff and getting hour
From what I understood in your question (you actually need to provide a sample couple of documents with your schema) if your Traitement
model has the following structure, for instance:
/* 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")}
Your aggregation framework would have a single $project
pipeline operation where you get the difference between the two dates by using the $subtract
operator and then transform that date difference in milliseconds to hours by using the $divide
operator. The last stage in your pipeline will be to use the $group
operator to group the documents from the previous pipeline and $sum
the hours in date difference:
Traitement.aggregate([ { $project: { user: 1, dateDifference: { $divide: [{ $subtract: [ "$dateSortie", "$dateEntre" ] }, 1000*60*60 ] } } }, { $group: { _id: "$user", total : { $sum : "$dateDifference" } } } ])
Results:
/* 0 */{ "result" : [ { "_id" : "jkl", "total" : 8.5 }, { "_id" : "abc", "total" : 5 } ], "ok" : 1}