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

Събиране на обекти за събиране на Mongodb общо часове

Моето предложение е следното:

db.collection.aggregate([
   {
      $addFields: {
         duration: {
            $toLong: {
               $dateFromParts: {
                  year: 1970,
                  hour: { $toInt: { $first: { $split: ["$durationHrs", ":"] } } },
                  minute: { $toInt: { $last: { $split: ["$durationHrs", ":"] } } },
               }
            }
         }
      }
   },
   { $group: { _id: null, durations: { $sum: "$duration" } } },
   {
      $set: {
         h: {
            $toInt: {
               $sum: [{
                  $multiply: [
                     { $dayOfYear: { $toDate: "$durations" } }, 24]
               },
               -24,
               { $hour: { $toDate: "$durations" } }]
            }
         },
         m: { $minute: { $toDate: "$durations" } }
      }
   },
   { $project: { durations: { $concat: [{ $toString: "$h" }, ":", { $toString: "$m" }] } } }
])

Имайте предвид, че работи само за период до една година, т.е. 366 дни.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Обратното извикване на Mongoose.js instance.save() не се задейства

  2. Преместете елемент от един масив в друг в рамките на същия документ MongoDB

  3. Mongoose:populate() / DBref или дублиране на данни?

  4. Как да използваме MongoDB агрегиране за операции с набори с общо предназначение (обединение, пресичане, разлика)

  5. Проблеми при стартиране на примери в Meteor