У меня есть запрос агрегации Монго, который возвращает правильные результаты, за исключением диапазона дат, указанного в $ match. Он в основном возвращает те же результаты со значениями диапазона дат или без них. По сути, я пытаюсь определить общее количество доставленных сообщений в определенном месте на определенную дату.
const startOfToday = moment()
.startOf('day')
.tz('America/New_York')
const endOfToday = moment()
.endOf('day')
.tz('America/New_York')
// Show Todays Entries Only
let fromDate = new Date(startOfToday);
let toDate = new Date(endOfToday);
Model.aggregate([
{
$match: {
'analytics.twilio.status': 'delivered',
'analytics.twilio.date': { $gte: fromDate },
'analytics.twilio.date': { $lte: toDate }
}
},
{
$lookup: {
from: 'branches',
localField: 'branch',
foreignField: '_id',
as: 'branch'
}
},
{
$match: {
'branch.0.org_id': orgId
}
},
{ $unwind: '$branch' },
{
$group: {
_id: '$branch.name',
delivered: { $sum: 1 }
}
}
])
.sort('_id')
.then(response => {
if (response) {
res.json(response);
}
});
});
Вот сокращенная версия схемы:
const Wip = new Schema({
branch: {
type: Schema.Types.ObjectId,
ref: 'branches'
},
analytics: {
twilio: {
sid: { type: String },
status: { type: String },
error: { type: String },
date: { type: Date }
}
},
date: { type: Date, default: Date.now }
});
const BranchSchema = new Schema({
name: { type: String, required: true },
org_id: { type: String, required: true },
clinic_id: { type: String, required: true },
})
Я думал, что проблема может быть в $ lookup, но проблема все еще возникает, если я удаляю $ lookup и использую поле $ branch в качестве идентификатора $ group.
Что я пропускаю? Нужно ли добавлять какой-то $ cond?