From 0a60cc0363b06b55314308ba2c0f4df513493e21 Mon Sep 17 00:00:00 2001 From: Alex Holliday Date: Tue, 13 Jan 2026 21:44:16 +0000 Subject: [PATCH] check repo fix --- .../checks/MongoChecksRepistory.ts | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/server/src/repositories/checks/MongoChecksRepistory.ts b/server/src/repositories/checks/MongoChecksRepistory.ts index d04118da0..f5c398fc8 100644 --- a/server/src/repositories/checks/MongoChecksRepistory.ts +++ b/server/src/repositories/checks/MongoChecksRepistory.ts @@ -173,28 +173,33 @@ class MongoChecksRepistory implements IChecksRepository { }; findLatestChecksByMonitorIds = async (monitorIds: string[]): Promise => { + if (monitorIds.length === 0) { + return {}; + } const mongoIds = monitorIds.map((id) => new mongoose.Types.ObjectId(id)); - const checkMap = await CheckModel.aggregate([ + const limitPerMonitor = 25; + const checkGroups = await CheckModel.aggregate([ { $match: { "metadata.monitorId": { $in: mongoIds }, }, }, - { $sort: { createdAt: -1 } }, { $group: { _id: "$metadata.monitorId", - latestChecks: { $push: "$$ROOT" }, - }, - }, - { - $project: { - latestChecks: { $slice: [{ $ifNull: ["$latestChecks", []] }, 25] }, + latestChecks: { + $topN: { + n: limitPerMonitor, + sortBy: { createdAt: -1 }, + output: "$$ROOT", + }, + }, }, }, ]); - return checkMap.reduce((acc, cm) => { - acc[cm._id.toString()] = cm.latestChecks.map((c: CheckDocument) => this.toEntity(c)); + return checkGroups.reduce((acc, group) => { + const monitorId = group._id.toString(); + acc[monitorId] = (group.latestChecks ?? []).map((doc: CheckDocument) => this.toEntity(doc)); return acc; }, {}); };