Полагаю, вы могли бы использовать структуру агрегации, чтобы преобразовать строковую дату в правильную дату, выбрать месяцы и годы и правильно сопоставить ее. Примерно так:
model.aggregate([{
"$addFields": {
"convertedDate": {
"$toDate": "$myDate" // mydate is your field name which has string
}
}
}, {
"$addFields": {
"month": {
"$month": "$convertedDate"
},
"year": {
"$year": "$convertedDate"
}
}
}, {
"$match": {
"month": 3, // this is your search criteria
"year": 2020 // // this is your search criteria
}
}, {
"$project": {
"month": 0, // Do not take temp added fields month and year
"year": 0 // Do not take temp added fields month and year
}
}])
Это может выглядеть как большой запрос, но я думаю, что это гораздо лучше, чем делать строковое сопоставление с использованием регулярных выражений. Если ваше поле сохранено в формате даты, вы также можете удалить первый этап, на котором вы делаете $toDate
. Надеюсь, это поможет