sql >> Databáze >  >> NoSQL >> MongoDB

Agregace MongoDB pro přidání chybějících měsíců mezi dvě data po seskupení v poli data

Nejprve jsem si myslel, že toho lze snadno dosáhnout pomocí kódu, ale i s MongoDB to můžete udělat, ale se vstupem z kódu:

Řekněme, že vaše fromDate je červen 2018 a dosud je červen-2019, pak pomocí svého programovacího jazyka můžete snadno získat všechny měsíce mezi těmito dvěma daty v tomto formátu mm-yyyy . Můžete to zkusit udělat pomocí MongoDB, ale raději bych to upřednostnil jako vstup pro dotaz.

Dotaz:

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-Playground

Odkaz: javascript-get-all-months-between-two -data



  1. mongoexport bez pole _id

  2. Šablona MeteorJS nezobrazuje data, nezobrazuje se

  3. mongoDB updateMany s upsert true a $in ve stavu kde

  4. Použití Joda-Time k vytvoření správného ISODate pro vložku Mongo