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

Агрегиране на MongoDB за добавяне на липсващи месеци между две дати след групиране в полето за дата

Първо си помислих, че това може лесно да се постигне чрез код, но дори и с MongoDB можете да направите това, но с вход от код:

Да кажем, че вашата fromDate е юни-2018 &до днес е юни-2019 г., тогава като използвате езика си за програмиране, можете лесно да получите всички месеци между тези две дати в този формат мм-гггг . Можете да опитате да направите това с помощта на MongoDB, но аз предпочитам като вход за заявка.

Запитване:

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
                  }
                ]
              ]
            }
          }
        }
      }
    }
  ])

Тест: MongoDB-Playground

Справка: javascript-get-all-months-between-two -дати



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как се прави съединяване на масив в mongoose (mongodb) с node.js?

  2. Актуализирайте подмножество от полета с Mongoose

  3. MongoDB добавяне към полето за присъединяване на колекция от основното

  4. Указване на име на колекция с MongoEngine

  5. Критерии/обобщаване:търсене на всички пълни документи, чието поле за масив има елемент с последно зададен статус