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