MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tổng hợp MongoDB để thêm các tháng còn thiếu giữa hai ngày sau khi nhóm vào trường ngày

Lúc đầu, tôi nghĩ rằng điều này có thể dễ dàng đạt được thông qua mã, nhưng ngay cả với MongoDB, bạn có thể làm điều đó nhưng với đầu vào từ mã:

Giả sử nếu fromDate của bạn là tháng 6 năm 2018 & toDate là tháng 6 năm 2019, sau đó bằng cách sử dụng ngôn ngữ lập trình của mình, bạn có thể dễ dàng nhận được tất cả các tháng giữa hai ngày đó ở định dạng mm-yyyy này . Bạn có thể thử thực hiện việc này bằng MongoDB nhưng tôi muốn làm đầu vào cho truy vấn hơn.

Truy vấn:

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

Kiểm tra: MongoDB-Playground

Tham khảo: javascript-get-all-months-between-two -ngày



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoosejs làm mới tài liệu

  2. Các trường truy vấn trong Bộ sưu tập MongoDB.

  3. Kết nối với MongoDB có tự động đóng trên process.exit () không?

  4. Thay đổi một đối tượng hiện có trong một mảng nhưng vẫn bảo toàn tính duy nhất chính

  5. Các trường được tính toán theo nhóm trong MongoDB