आपके प्रश्न में जो मैंने समझा है (आपको वास्तव में अपने स्कीमा के साथ कुछ दस्तावेज़ों का नमूना प्रदान करने की आवश्यकता है) यदि आपका Traitement
उदाहरण के लिए मॉडल में निम्नलिखित संरचना है:
/* 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")
}
आपके एकत्रीकरण ढांचे में एक $project
होगा पाइपलाइन संचालन जहां आपको $subtract
. का उपयोग करके दो तिथियों के बीच अंतर प्राप्त होता है ऑपरेटर और फिर $divide
. का उपयोग करके उस तारीख के अंतर को मिलीसेकंड में घंटों में बदल दें ऑपरेटर। आपकी पाइपलाइन में अंतिम चरण $group
. का उपयोग करना होगा पिछली पाइपलाइन और $sum
. से दस्तावेज़ों को समूहबद्ध करने के लिए ऑपरेटर घंटों में तारीख का अंतर:
Traitement.aggregate([
{
$project: {
user: 1,
dateDifference: {
$divide: [{
$subtract: [ "$dateSortie", "$dateEntre" ]
}, 1000*60*60
]
}
}
},
{
$group: {
_id: "$user",
total : {
$sum : "$dateDifference"
}
}
}
])
परिणाम:
/* 0 */
{
"result" : [
{
"_id" : "jkl",
"total" : 8.5
},
{
"_id" : "abc",
"total" : 5
}
],
"ok" : 1
}