convert findByIds to aggregate pipeline to include uptime percentage

This commit is contained in:
Alex Holliday committed 2026-06-07 10:02:25 -07:00
1 parent 0f99c7004d
commit 19b873ca87
2 files changed
+297 -2

No files matched your search

@@ -151,9 +151,36 @@ class MongoMonitorsRepository implements IMonitorsRepository {
};
findByIds = async (monitorIds: string[]): Promise<Monitor[]> => {
if (!monitorIds.length) {
return [];
}
const objectIds = monitorIds.map((id) => new mongoose.Types.ObjectId(id));
const monitors = await MonitorModel.find({ _id: { $in: objectIds } });
return this.mapDocuments(monitors);
const pipeline: PipelineStage[] = [
{ $match: { _id: { $in: objectIds } } },
{
$lookup: {
from: "monitorstats",
localField: "_id",
foreignField: "monitorId",
as: "stats",
},
},
{
$addFields: {
uptimePercentage: { $arrayElemAt: ["$stats.uptimePercentage", 0] },
},
},
{
$project: {
stats: 0,
},
},
];
const documents = await MonitorModel.aggregate(pipeline);
return documents.map((doc) => this.toEntity(doc));
};
findByIdsWithChecks = async (monitorIds: string[], checksCount: number = 25): Promise<Monitor[]> => {