sql >> データベース >  >> NoSQL >> MongoDB

日付フィールドでグループ化した後、2つの日付の間に欠落している月を追加するMongoDB集計

    最初は、これはコードで簡単に実現できると思いましたが、MongoDBでも実行できますが、コードからの入力が必要です:

    fromDate 2018年6月&現在 は2019年6月です。プログラミング言語を使用すると、この2つの日付の間のすべての月をこの形式で簡単に取得できます mm-yyyy 。 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 AOF fsync(ALWAYS)とLSMツリー

    2. キーがRedisCache/ dbに保存されている時間を確認するにはどうすればよいですか?

    3. redishget値をnodejsの変数に保存する

    4. node.jsを使用してmongodbに画像を保存するにはどうすればよいですか?