MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Agregasi MongoDB untuk menambahkan bulan yang hilang antara dua tanggal setelah pengelompokan pada bidang tanggal

Pada awalnya saya pikir ini dapat dengan mudah dicapai melalui kode, tetapi bahkan dengan MongoDB Anda dapat melakukannya tetapi dengan masukan dari kode :

Katakanlah jika Anda dariTanggal adalah Juni-2018 &sampai Tanggal adalah Juni-2019, maka dengan menggunakan bahasa pemrograman Anda, Anda dapat dengan mudah mendapatkan semua bulan di antara dua tanggal tersebut dalam format ini mm-yyyy . Anda dapat mencoba melakukan ini menggunakan MongoDB tetapi saya lebih suka sebagai masukan daripada kueri.

Kueri :

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

Uji : MongoDB-Playground

Ref : javascript-get-all-months-between-two -tanggal



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Agregat Moongoose $match tidak cocok dengan id

  2. Apakah penjurnalan MongoDB menjamin daya tahan?

  3. Apakah aman menghapus file jurnal mongodb?

  4. Di MongoDB, bagaimana saya bisa menemukan dokumen yang disematkan?

  5. perintah mongorestore mengganti catatan yang ada?