I'm trying to get the count of this month's data using aggregate but it's giving me no match found even though I have data in DB.
var month = new Date().getMonth();
var year = new Date().getFullYear();
const start = new Date(year, month, 1).setHours(0, 0, 1);
const end = new Date(year, month + 1, 0).setHours(23, 59, 59);
const data = await verificationModel.aggregate([
{
$match:{'status':{ $gt: 3, $lt:7},'createdAt': { $gt:start, $lt:end},'fename': { $ne: null }}
},
{
$facet: {
"categorizedBycasecount": [
{
$unwind: "$fename"
},
{
$sortByCount: "$fename"
},
{$limit:5},
]
}
}
]);
created a mongo playground it's working there link
If I remove createdAt filter data is visible
Every thing is fine except the start and end date
start and end date which you calculated is in string format shown below
var month = new Date().getMonth();
var year = new Date().getFullYear();
const start = new Date(year, month, 1).setHours(0, 0, 1);
const end = new Date(year, month + 1, 0).setHours(23, 59, 59);
console.log({start, end})
You can update the code to get the required format for the mongodb createdAt field
var month = new Date().getMonth();
var year = new Date().getFullYear();
const start = new Date(year, month, 1).setHours(0, 0, 1);
const end = new Date(year, month + 1, 0).setHours(23, 59, 59);
console.log(new Date(start).toISOString())
console.log(new Date(end).toISOString())