首页 > 解决方案 > MongoDB和尚集合名称:UserX + UserY

问题描述

使用前端 Vue.js,我们(用户)尝试加入私人聊天。使用 MongoDB 将消息存储在集合“XY”中,其中:

=> 集合名称“UserX+UserY”,类似于5ef630dfbe431b28e0d97823 + 5ef4fa80c3a5071e2055b507 = 5ef630dfbe431b28e0d978235ef4fa80c3a5071e2055b507。

- 用户列表显示在前端(通过从数据库中读取用户名帐户)

问题:

  1. UserX 通过选择(单击)一个 UserY 开始聊天 - 创建 MongoDB 集合“UserX+UserY”

  2. UserY 点击 UserX - MongoDB 集合“UserY+UserX”

当 UserY 尝试加入聊天时,我需要先获取已经存在的房间,让 UserY 加入它,而不是创建另一个聊天。

从 roomName(collection) 中反转用户 ID 是问题所在。

我试图通过按字典顺序比较集合名称中的子字符串来解决。 如果包含两个子字符串(用户 ID)的集合,需要让用户加入该房间。子字符串顺序并不重要。

标签: node.jsmongodbcollectionschat

解决方案


我建议简化您的房间命名代码。您可以让两个用户选择相同的房间名称而不检查数据库。因此,从顶部开始,您的代码可能是:

if(toUserId !== myUserId) {
  let roomName = toUserID < myUserId ? toUserId+myUserId : myUserId+toUserId;

现在,两个用户都可以检查数据库以查看该房间名称是否必须创建或已经存在,发出代码中引用的“加入”事件,并发布消息。


推荐阅读