पहले तो मुझे लगा कि इसे कोड के माध्यम से आसानी से प्राप्त किया जा सकता है, लेकिन MongoDB के साथ भी आप ऐसा कर सकते हैं, लेकिन कोड से इनपुट के साथ:
मान लें कि यदि आपकी दिनांक से जून-2018 और आज तक . है जून-2019 है, तो अपनी प्रोग्रामिंग भाषा का उपयोग करके आप इस प्रारूप में उन दो तिथियों के बीच सभी महीनों को आसानी से प्राप्त कर सकते हैं 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 -तिथियां