我对 mongomapper + 排序感到困惑。
我有一个测试博客,其中包含如下帖子的数据:
http://www.mongodb.org/display/DOCS/Schema+Design
现在,我想只显示每个博客条目按时间升序排序的评论。
如果我使用 where,我会得到 Plucky,当我使用 all() 时,我会得到 Array...这是如何工作的?
我对 mongomapper + 排序感到困惑。
我有一个测试博客,其中包含如下帖子的数据:
http://www.mongodb.org/display/DOCS/Schema+Design
现在,我想只显示每个博客条目按时间升序排序的评论。
如果我使用 where,我会得到 Plucky,当我使用 all() 时,我会得到 Array...这是如何工作的?
您链接到的答案是在内存中对结果集进行排序,这很昂贵,并且如果您的评论多于一批可以显示的评论,则可能会导致错误。
对此进行排序的正确方法是在查询中使用 plucky 的 sort() 方法,按 created_at,降序(最新的优先):
post.comments.sort(:created_at).each {|comment| do_awesome_stuff(comment) }
(假设您有一个拥有多个评论的 Post 模型,并且您在评论中使用了内置 created_at 字段。
Mongomapper 使用类似于 ActiveRecord 范围的链接查询/过滤器模型,这就是为什么 where() 和 sort() 一样返回可链接的 Plucky 查询的原因。然后,您可以将其转换为结果数组或链接更多排序/过滤器。您还可以直接在 plucky 查询上使用像 each() 这样的枚举器。
上面示例中的代码正在执行以下链式调用: