【发布时间】:2016-05-27 22:54:51
【问题描述】:
我有两个集合:(带有猫鼬的模式)
在我的应用中可以存在视频,并且某些视频可以是活动的一部分。
关键是我想获取特定事件的所有视频,其中可见性 (event.videos.visibility) 为真,视频状态为例如1,它应该被排序,例如video.date_created 和 limit/skip
我必须如何更改集合架构才能获得最佳性能?
将视频中的重要字段(如date_created、state)也保存在事件中(冗余信息)是否是个好主意?
或者实际的架构是一个好的解决方案?
实际解决方案有2个查询选项:
首先: 从事件中获取videos_visible - 数组并搜索视频,其中id 在此数组中,并且视频中的events-Array 匹配($elemMatch)event_id + visibility === true
第二种:第一个没有事件数组的解决方案
在这两种方法中,我都可以对视频进行排序并毫无问题地跳过/限制它们.. 但我不知道这是否是一个好的解决方案。
我尝试的另一个解决方案是在 event.videos_visible 中而不是在视频本身中保留其他事件/视频信息,例如可见性或 display_type。 问题是,我无法对视频进行排序,或限制/跳过它们。 对于 mongoose-population,无法跳过/限制视频数据,例如video.date_created。在我看来,这不是处理此查询/问题的正确方法。
我认为问题在于为这种“多对多”案例建模正确的模式。
【问题讨论】:
标签: javascript node.js mongodb mongoose many-to-many