From 31a420cf5c446249ba52e0ddcb2937e99f6e3e84 Mon Sep 17 00:00:00 2001 From: Geert Rademakes Date: Fri, 8 Aug 2025 09:18:48 +0200 Subject: [PATCH] perf(backend): reduce projection for playlist total duration calculation; fewer fields fetched --- packages/backend/src/routes/songs.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/backend/src/routes/songs.ts b/packages/backend/src/routes/songs.ts index d4c0e96..d674ce4 100644 --- a/packages/backend/src/routes/songs.ts +++ b/packages/backend/src/routes/songs.ts @@ -153,8 +153,7 @@ router.get('/playlist/*', async (req: Request, res: Response) => { const totalPages = Math.ceil(totalSongs / limit); // Calculate total duration for the entire playlist - const allPlaylistSongs = await Song.find({ id: { $in: trackIds } }).lean(); - const totalDuration = allPlaylistSongs.reduce((total, song: any) => { + const totalDuration = (await Song.find({ id: { $in: trackIds } }, { totalTime: 1 }).lean()).reduce((total, song: any) => { if (!song.totalTime) return total; const totalTimeStr = String(song.totalTime); const seconds = Math.floor(Number(totalTimeStr) / (totalTimeStr.length > 4 ? 1000 : 1));