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

Agregacja MongoDB w celu dodania brakujących miesięcy między dwiema datami po zgrupowaniu według pola daty

Na początku myślałem, że można to łatwo osiągnąć za pomocą kodu, ale nawet z MongoDB możesz to zrobić, ale z danymi wejściowymi z kodu :

Załóżmy, że Twój fromDate jest czerwiec 2018 i do tej pory jest czerwiec 2019 r., więc używając swojego języka programowania, możesz łatwo uzyskać wszystkie miesiące między tymi dwiema datami w tym formacie mm-rrrr . Możesz spróbować to zrobić za pomocą MongoDB, ale wolałbym jako dane wejściowe do zapytania.

Zapytanie:

db.collection.aggregate([
    {
      $group: {
        _id: {
          date: {
            $dateToString: {
              format: "%m-%Y",
              date: "$reviewUpdatedAt"
            }
          },
          loc: "$branchId"
        },
        Total: {
          $sum: 1
        }
      }
    },
    {
      $group: {
        _id: "$_id.loc",
        reviews: {
          $push: {
            Total: "$Total",
            "date": "$_id.date"
          }
        }
      }
    },
    /** Overwrite existing reviews field with new array, So forming new array :: 
     * as you're passing all months between these dates get a difference of two arrays (input dates - existing dates after group)
     * while will leave us with an array of missing dates, we would iterate on that missing dates array &
     * concat actual reviews array with each missing date
     * */
    {
      $addFields: {
        reviews: {
          $reduce: {
            input: {
              $setDifference: [
                [
                  "06-2018",
                  "07-2018",
                  "08-2018",
                  "09-2018",
                  "10-2018",
                  "11-2018",
                  "12-2018",
                  "01-2019",
                  "02-2019",
                  "03-2019",
                  "04-2019",
                  "05-2019",
                  "06-2019"
                ],
                "$reviews.date"
              ]
            },
            initialValue: "$reviews",
            in: {
              $concatArrays: [
                "$$value",
                [
                  {
                    date: "$$this",
                    Total: 0
                  }
                ]
              ]
            }
          }
        }
      }
    }
  ])

Test: MongoDB-Plac zabaw

Odniesienie: javascript-get-all-miesięcy-między-dwoma -daty



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB brak miejsca na urządzeniu z dockerem

  2. Dlaczego mongodb jest resetowany po przejściu na openshift

  3. Numeryczna nazwa kolekcji Usuń

  4. Jak mogę uruchamiać polecenia MongoDB, odpytując specjalną kolekcję $cmd?

  5. wyrzuć nową mangusę.Error.MissingSchemaError(nazwa); ^ MongooseError:Schemat nie został zarejestrowany dla sprzedawcy modeli