我需要创建一个消息系统,一个人可以在其中与许多用户进行对话。
例如,我开始与 user2、user3 和 user4 交谈,因此他们中的任何人都可以看到整个对话,并且如果对话在任何时候都不是私密的,则任何参与者都可以将任何其他人添加到对话中。
这是我的想法如何做到这一点。
我正在使用 Mongo,我的想法是使用对话框作为实例而不是消息。
架构如下:
{
_id : ...., // dialog Id
'private' : 0 // is the conversation private
'participants' : [1, 3, 5, 6], //people who are in the conversation
'msgs' :[
{
'mid' : ...// id of a message
'pid': 1, // person who wrote a message
'msg' : 'tafasd' //message
},
....
{
'mid' : ...// id of a message
'pid': 1, // person who wrote a message
'msg' : 'tafasd' //message
}
]
}
我可以看到这种方法的一些优点
- 在大型数据库中,很容易找到某些特定对话的消息。
- 将人员添加到对话中会很容易。
但这是一个问题,我找不到解决方案:
对话变得太长(以 Skype 为例),他们没有向您显示所有对话,而是向您显示一部分,然后向您显示其他消息。
在其他情况下跳过,限制可以解决问题,但我在这里该怎么做呢?
如果这是不可能的,您有什么建议?
MongoDB 文档 https://web.archive.org/web/20111129115718/http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields解释如何选择数组元素的子范围。
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: 5}}) // first 5 comments
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: -5}}) // last 5 comments
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: [20, 10]}}) // skip 20, limit 10
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: [-20, 10]}}) // 20 from end, limit 10
您可以使用此技术仅选择与您的 UI 相关的消息。但是,我不确定这是否是一个好的架构设计。您可能需要考虑将“可见”消息与“存档”消息分开。它可能会使查询变得更容易/更快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)