From 91fe01f2476a94d30026749927aafcc9f524ea53 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Thu, 22 Dec 2022 00:33:14 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96fetchConverseLastMess?= =?UTF-8?q?ages=E6=9F=A5=E8=AF=A2=E8=AF=AD=E5=8F=A5=EF=BC=8C=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E6=95=B0=E6=8D=AE=E9=87=8F=E8=BF=87=E5=A4=A7=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E8=AF=B7=E6=B1=82=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/services/core/chat/message.service.ts | 47 ++++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/server/services/core/chat/message.service.ts b/server/services/core/chat/message.service.ts index 43aab794..9601607d 100644 --- a/server/services/core/chat/message.service.ts +++ b/server/services/core/chat/message.service.ts @@ -260,32 +260,31 @@ class MessageService extends TcService { */ async fetchConverseLastMessages(ctx: TcContext<{ converseIds: string[] }>) { const { converseIds } = ctx.params; - const list = await this.adapter.model - .aggregate<{ - _id: string; - lastMessageId: string; - }>([ - { - $match: { - converseId: { - $in: converseIds.map((id) => new Types.ObjectId(id)), - }, - }, - }, - { - $group: { - _id: '$converseId' as any, - lastMessageId: { - $last: '$_id', + + // 这里使用了多个请求,但是通过limit=1会将查询范围降低到最低 + const list = await Promise.all( + converseIds.map((id) => { + return this.adapter.model + .findOne( + { + converseId: new Types.ObjectId(id), }, - }, - }, - ]) - .exec(); + { + _id: 1, + converseId: 1, + } + ) + .sort({ + _id: -1, + }) + .limit(1) + .exec(); + }) + ); - return list.map((item) => ({ - converseId: item._id, - lastMessageId: item.lastMessageId, + return list.filter(Boolean).map((item) => ({ + converseId: String(item.converseId), + lastMessageId: String(item._id), })); }