当前位置:  开发笔记 > 编程语言 > 正文

嵌入式文档中的mongodb限制

如何解决《嵌入式文档中的mongodb限制》经验,为你挑选了1个好方法。

我需要创建一个消息系统,一个人可以与许多用户进行对话.例如,我开始与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为例)并且他们没有向你展示所有的对话,他们向你展示了一部分,之后他们正在展示你还有其他消息.在其他情况下,跳过,限制解决了案例,但我怎么能在这里做到这一点?

如果这不可能你有什么建议吗?



1> jmacinnes..:

MongoDB文档解释了如何选择数组元素的子范围.

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相关的消息.但是,我不确定这是一个好的架构设计.您可能需要考虑从"存档"消息中分离出"可见"消息.它可能使查询更容易/更快.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有