sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb, grupp efter datediff och få timme

Vad jag förstod i din fråga (du måste faktiskt tillhandahålla ett par dokument med ditt schema) om din Traitement modellen har följande struktur, till exempel:

/* 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")
}

Ditt aggregeringsramverk skulle ha ett enda $project pipeline operation där du får skillnaden mellan de två datumen genom att använda $subtract operatorn och sedan omvandla den datumskillnaden i millisekunder till timmar genom att använda $divide operatör. Det sista steget i din pipeline är att använda $group operatör för att gruppera dokumenten från föregående pipeline och $sum timmarna i datumskillnad:

Traitement.aggregate([ 
    { 
        $project: { 
            user: 1,             
            dateDifference: { 
                $divide: [{ 
                    $subtract: [ "$dateSortie", "$dateEntre" ]
                    }, 1000*60*60
                ] 
            }
         }
    },
    { 
        $group: { 
            _id: "$user",             
            total : { 
                $sum : "$dateDifference"
            }
        }
    } 
])

Resultat:

/* 0 */
{
    "result" : [ 
        {
            "_id" : "jkl",
            "total" : 8.5
        }, 
        {
            "_id" : "abc",
            "total" : 5
        }
    ],
    "ok" : 1
}



  1. Databassäkerhet 101:Förstå databasåtkomstprivilegier

  2. MongoDB Hämtar långsamt dokument (indexering används)

  3. QueryBuilder och BasicDBObjectBuilder användning i MongoDB 3.3.0 ovan

  4. hur man undviker $push-ing-nullvärden i mongo-aggregationsramverk