MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Obliczanie średniej z ostatnich 200 dni w agregacji MongoDB i NodeJS

Musisz przefiltrować dokumenty przed ich pogrupowaniem. Powinno być tak:

db.collection.aggregate([
   {
      $addFields: {
         DateObj: {
            $regexFindAll: { input: "$Date", regex: "\\d+" }
         }
      }
   },
   {
      $set: {
         DateObj: {
            $dateFromParts: {
               year: { $toInt: { $arrayElemAt: ["$DateObj.match", 0] } },
               month: { $toInt: { $arrayElemAt: ["$DateObj.match", 1] } },
               day: { $toInt: { $arrayElemAt: ["$DateObj.match", 2] } },
               hour: { $toInt: { $arrayElemAt: ["$DateObj.match", 3] } },
               minute: { $toInt: { $arrayElemAt: ["$DateObj.match", 4] } },
               second: { $toInt: { $arrayElemAt: ["$DateObj.match", 5] } },
               timezone: "Europe/Zurich"
            }
         }
      }
   },
   {
      $match: {
         $expr: {
            $gte: ["$DateObj", { $subtract: ["$$NOW", 200 * 60 * 60 * 24 * 1000] }]
         }
      }
   },
   {
      "$group": {
         _id: null,
         "Volume": {
            "$avg": "$Volume"
         }
      }
   }
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Polecenie nie powiodło się z powodu błędu 168 (InvalidPipelineOperator):„Nierozpoznane wyrażenie „$match”

  2. Klaster mongodb z punktem końcowym ELB jako dns

  3. Mongoose - uzyskaj długość tablicy w modelu

  4. MongoDB:Brak uprawnień administratora do wykonania polecenia

  5. MongoDB do DynamoDB