【发布时间】:2021-10-06 05:21:44
【问题描述】:
我想获取一个用户和另一个用户之间的最后一条消息,该消息在一个名为聊天的集合中,所有成员之间都有对话,但我想过滤以便只有一个用户和另一个用户之间的最后一条消息出现。有什么方法可以在 mongodb 中得到这个?
例如,我想获取用户 Carlos 发送/接收的最后一条消息。我想要一个这样的列表
例子:
Chat between John Doe and me
John Doe: Hi
Chat between Max and me
Max: Hello
Chat between Jessica and me
Owner: Hello Jessica
型号
1. owner = ObjectId
2. recipient = ObjectId
3. content = Message content
4. createdAt / updatedAt = Autogenerate
我目前正在尝试这个,但错误是我收到了用户收到的最后一条消息,以及用户发送给该用户的最后一条消息
我正在尝试的代码
const chatData = await this.chatModel
.find({ $or: [{ owner: userId }, { recipient: userId }] })
.populate('owner', DEFAULT_POPULATE_SELECT_USER)
.populate('recipient', DEFAULT_POPULATE_SELECT_USER)
.sort({ createdAt: 'desc' })
.select({ __v: false })
.lean();
const chatLog: ChatModel[] = chatData.reduce((unique, item: any) => {
if (!item.recipient) return unique;
return unique.some((x) => x.recipient._id == item.recipient._id) ? unique : [...unique, item];
}, []);
【问题讨论】:
标签: javascript mongodb mongoose mongodb-query