使用 MongoDB 和 Graphql 管理聊天室中的消息

Posted

技术标签:

【中文标题】使用 MongoDB 和 Graphql 管理聊天室中的消息【英文标题】:Managing messages in chat room with MongoDB and Graphql 【发布时间】:2021-05-31 12:13:47 【问题描述】:

我想知道如何管理我的聊天室中的消息。我的假设是:

    有一个集合rooms,其字段如idmessagesparticipants 可以有很多房间有很多参与者

现在,我有疑问:

    我是否应该使用messages 单独收集(idauthortext,其中author 是对users 收集的引用)? 或者我应该在messages 中保留简单的对象而不是带有引用的文档?

我可以想象带有消息的集合将是 huuuuge(如果未清除)。 Mongo会处理它吗?或者也许有更好的方法来做到这一点?

问候

【问题讨论】:

【参考方案1】:

这取决于您正在构建的规模。

我想说的是,像你我这样的人认为是巨大的数量对于数据库系统(无论是关系数据存储还是 nosql 数据存储)来说通常都是小菜一碟。

如果对项目一无所知,很难说,但我怀疑,如果您根据正确性/有用性设计数据模型,并担心下一步的性能,您可能会过得更好。

根据您描述的实体(房间、消息、参与者、用户……),我正在描绘一个应用程序,例如 Discord。在这种情况下,我会将房间和用户视为一阶实体,将参与者和消息都视为属于房间的(大)有序数据列表(而两者中的每个条目显然也有对其个人用户/作者的引用) .

【讨论】:

这就是它的工作原理,但在 MongoDB 中,您具有称为填充的功能。我可以有messages: [ObjectID('...') ...]messages: [, ...] 之类的东西。第一种方法需要额外收集messages

以上是关于使用 MongoDB 和 Graphql 管理聊天室中的消息的主要内容,如果未能解决你的问题,请参考以下文章

使用 express 和 Mongodb 的 Graphql 查询将无法正常工作?

Express-graphql“在运行突变和查询时无法使用 mongodb 读取未定义的属性‘集合’”

如何在不创建 Mongoose 模型的情况下将 GraphQL 与 Mongoose 和 MongoDB 一起使用

使用 MongoDB 时的 Graphql 接口

GraphQL、Relay 和 Mongodb (mongoose) 如何获取数组

如何在使用 graphql 和 mongodb 的查询中使用“where”参数?