【发布时间】:2015-11-23 02:23:04
【问题描述】:
我正在构建一个 Twitter 克隆,但我在排序方面遇到了困难。
这是我的收藏:
Tweets:
createdAt: Date
body: String
userId: String
Events:
createdAt: Date
type: String (either 'retweet' or 'like')
tweetId: String
userId: String
当用户点击“转发”时,它会创建一个新的 Event 文档,用于跟踪推文和用户 ID。
然后,当我查看用户的个人资料页面时,我会搜索所有由该用户撰写的推文,或者存在具有该用户 ID 的“转推”事件的所有推文。我在服务器上进行了响应式连接,以便Tweets 集合拥有所有必要的推文。
问题在于排序:我正在按照createdAt 的值对所有推文进行排序。如果我转发昨天创建的推文,它将显示在我的提要中下方我最后一天自己的任何推文。
换句话说,我需要一种方法来对推文进行排序,或者通过它们自己的createdAt 字段,或通过关联事件的createdAt 字段(如果存在这样的事情)。
如果有更好的方法,我不反对重构我的模型。我曾想过每当你“转发”时创建一条新推文,但问题是每条推文都有一个likeCount 和一个retweetCount。如果我在转发时创建一条全新的推文,并且有人喜欢或转发了转发,那么所有数字都会出错(或者需要进行大量的非规范化更新)。
【问题讨论】:
-
似乎最简单的方法是在推文上添加
tweetedAt日期字段。否则排序会很慢,因为您需要映射您的推文并使用Event.createdAt日期对其进行扩充。 -
感谢米歇尔的快速回复!不完全确定您的意思;推文在发布推文时已经有一个
createdAt日期字段。问题是给定的推文可能会被转发 1000 次,每次都与特定用户绑定不同的日期。 -
对不起,我误会了。即使是原版,你也总是有
Event吗?在这种情况下,您可以按事件的createdAt日期对事件进行排序,然后查找每个事件的推文内容。 -
就是这样,我不 =(。我想我可以创建一个,只是为了让我的生活更轻松。我将如何按
Events集合对Tweets集合进行排序,然后? 我可以在客户端.fetch()他们并使用_.sortBy,但是在服务器上有更好的方法吗?
标签: javascript mongodb meteor