0

我对 mongomapper + 排序感到困惑。

我有一个测试博客,其中包含如下帖子的数据:

http://www.mongodb.org/display/DOCS/Schema+Design

现在,我想只显示每个博客条目按时间升序排序的评论。

如果我使用 where,我会得到 Plucky,当我使用 all() 时,我会得到 Array...这是如何工作的?

4

1 回答 1

2

您链接到的答案是在内存中对结果集进行排序,这很昂贵,并且如果您的评论多于一批可以显示的评论,则可能会导致错误。

对此进行排序的正确方法是在查询中使用 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() 这样的枚举器。

上面示例中的代码正在执行以下链式调用:

  1. 返回一个过滤此帖子对象的所有评论的勇敢查询
  2. 更新该查询以对 created_at 返回的评论进行降序排序
  3. 从数据库中获取一组结果,并通过 each() 将它们提供给您的代码
于 2012-12-20T18:48:18.803 回答