使用 MongoDB 和 Graphql 管理聊天室中的消息
Posted
技术标签:
【中文标题】使用 MongoDB 和 Graphql 管理聊天室中的消息【英文标题】:Managing messages in chat room with MongoDB and Graphql 【发布时间】:2021-05-31 12:13:47 【问题描述】:我想知道如何管理我的聊天室中的消息。我的假设是:
-
有一个集合
rooms
,其字段如id
、messages
、participants
可以有很多房间有很多参与者
现在,我有疑问:
-
我是否应该使用
messages
单独收集(id
、author
、text
,其中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 一起使用