MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb, групиране по datediff и получаване на час

От това, което разбрах във вашия въпрос (всъщност трябва да предоставите примерни два документа с вашата схема), ако вашият 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
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. използване на akka потоци за преминаване през колекцията на mongo

  2. Управление на потребителите на база данни с ClusterControl

  3. Flask MongoEngine пагинирани документи с поле за изображение

  4. Самоподписана SSL връзка с помощта на PyMongo

  5. MongoDB Java вложени документи не са достъпни чрез точки в името на ключа