あなたの質問で私が理解したことから(あなたは実際にあなたのスキーマでサンプルのいくつかの文書を提供する必要があります)あなたの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
を使用して2つの日付の差を取得するパイプライン操作 演算子を入力し、 $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
}