我正在尝试使用MongoDB在两个用户之间建模类似FB的聊天/讨论。
我为消息:
提出了以下BSon“结构” {
_id: ObjectId(...),
discussionId: ObjectId(...),
from: {
id: ObjectId(...),
nickname: ‘Joe’,
thumbnail: ‘xoopp7788ee….jpg’
},
to: {
id: ObjectId(...),
nickname: ‘Jane’,
thumbnail: ‘rtolkj96547cc….jpg’
},
text: ‘Hello Jane, How are you today?’,
posted: ISODateTime(...),
viewed: ISODateTime(...),
next: ObjectId(...),
previous: ObjectId(...)
}
我确实阅读了following mongodb documentation,但我仍然想提交我的问题,因为我的模型/问题略有不同。
首先,我不确定next
和previous
字段是否必要。我可以只使用posted
字段来线程消息吗?
其次,每条消息只能有一个文档会造成性能问题吗?每个文档有几条消息可以让我更好吗?
我期待着阅读您的意见和建议。
edit1 :discussionId
会以某种方式成为两个用户组合的唯一ID ...
答案 0 :(得分:3)
IMHO:
thumbnail
如果它引用了头像,则应该在用户个人资料中。如果这是一个笑脸,那么它应该与text
处于同一水平。from.id
是用户ID,那么为了节省空间,您无需重复nickname
。它可以在UI中“注入”,也可以在需要时将其发送到某个地方。有时复制数据可能很有用,但在这种情况下它是可疑的。discussion
集合可能已经有from
和to
。在这种情况下,您不必在每条消息中重复用户ID。您只能保留from
。from
和to
不起作用。您可能必须制作2个from
和to
数组。这取决于您的聊天类型。next
和previous
:通常我不会拥有它们。您可以在discussionId, from.id, to.id
找到讨论主题并按posted
对其进行排序。除非你有一些非常奇怪的聊天方式,否则你可以删除这两个字段。posted
有一个日期,没关系,但是如果你想保存更多的空间,日期也存储在_id
中,这样你就可以避免创建索引并存储额外的字段。nickname
和thumbnail
,那么您可以将from.id
升级为fromId
。