我使用aggregate
方法对数据库表中的数据进行分组。
这是我的模型:
const livenessLogSchema = new mongoose.Schema({
eventName: {
type: String,
required: true,
enum: ['connect', 'status', 'probability', 'liveness_error'],
},
timestamp: {
type: Date,
required: true,
}
}, {
timestamps: true
});
这是aggregate
的使用方式:
const livenessConnectionsData = await LivenessLog.aggregate([
{
$match: {
timestamp: {
$gte: moment(new Date(startDate)).tz('Asia/Jerusalem').startOf('day').toDate(),
$lte: moment(new Date(endDate)).tz('Asia/Jerusalem').endOf('day').toDate(),
}
}
},
{
$group: {
_id: {
$dateToString: { format: '%d/%m/%Y', date: '$timestamp', timezone: 'Asia/Jerusalem' }
},
startConnection: {
$sum: {
$cond: [{ $eq: ['$eventName', 'connect'] }, 1, 0]
}
},
endConnection: {
$sum: {
$cond: [{ $eq: ['$eventName', 'status'] }, 1, 0]
}
}
}
}
]);
基本上,在这种用法中,我得到的范围是startDate
至endDate
(例如:09/24/2020
至09/30/2020
)2个计数器:startConnection
和endConnection
。
问题是:如果表中的特定日期在startDate
至endDate
范围内,则根本没有文档({startDate
和endDate
等于{{1} }),那么我不会在结果中得到它。
因此,如果日期范围是0
到09/24/2020
,并且该范围内包含文档的唯一日期是09/25/2020
,那么我将得到结果:{{1 }}。
但是我确实希望将09/24/2020
包含在结果中:
[ { _id: '24/09/2020', start: 408, end: 308 } ]
如何?