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), })); }