我有一个Mongo聚合查询,该查询返回正确的结果,但$ 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 id,问题仍然会发生。
我俯瞰什么?我需要添加某种$ cond吗?
答案 0 :(得分:1)
您需要将$gte
和$lte
都包裹在单个花括号中
Model.aggregate([
{
$match: {
'analytics.twilio.status': 'delivered',
'analytics.twilio.date': { '$gte': fromDate, '$lte': toDate }
}
}
])