后台小白想做这么一个功能,请教下如何实现
article和tag集已经有了,每篇article都有一系列tag(article和tag是多对多),我选中几个tag,随机抽取十篇文章做精选集(随便叫啥集)。
我用的驱动是mongoose。 请问如何实现,比如选了6个tag,随机选出10篇article
谁能给些提示吗,一点思路也没有
可以仿关系型数据库的设计模式,另建一个article_tag关系集合。mongoose里面的population是你要用到的。 关于随机选取,去百度吧。有很多解决方案,个人喜欢增加个random字段的方法实现。
@qujinxiong 谢谢,按照这思路实现了一个。发现其他点上还有问题,但至少这个需求知道怎么做了
我直接就把tag当成数组,作为一个字段存在文章记录里面,😂 https://github.com/zxj963577494/node-snimay
@zxj963577494 已star。我做着发现了其他问题,一个是我想选10篇文章,tag不一定是10个,article和tag是多对多嘛,怎么能够选出的文章既包括了所选的tag,又能尽量均匀一些,比如选了5个tag希望10篇文章里不会有好几篇是同一个tag,而有的tag没有抽取出来。 另外在查询性能上完全不懂,所以先不考虑了。
@IEfucker 简单点就是一个tag多取一些数据,程序中再分配,最后渲染到界面
是呀,MongoDB的优势就是可以存数组,所以直接存tags就可以了。不过提醒楼主,应该要用复数哦,所以是tags,不是tag。
随机选择就random字段法,给每一个文档都加一个random字段,该值随机 db.acticle.find({tags{$in:[“aaa”,“bbb”]},ramdom:{$gte:Math.ramdom()}}).limit(1) 随机选一个
随机选多个就in喽, 但是效率上待探讨
@zhanzhenzhen 谢谢,是tags
@AnzerWall 我也是这样做的,大概功能已经出来了,很开心。但随机选的算法还要再考虑考虑,另外性能我也担心过,先做其他部分吧,毕竟没找到合适数据呢