【问题标题】:Mongomapper sortingMongomap排序
【发布时间】:2012-12-20 12:08:00
【问题描述】:

我对 mongomapper + 排序感到困惑。

我有一个测试博客,其中包含这样的帖子:

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

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

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

【问题讨论】:

标签: ruby mongodb mongomapper


【解决方案1】:

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

对此进行排序的正确方法是在查询中使用 plucky 的 sort() 方法,按 created_at,降序(最新的优先):

post.comments.sort(:created_at).each {|comment| do_awesome_stuff(comment) }

(假设您有一个包含多个 cmets 的 Post 模型,并且您正在使用 cmets 上的内置 created_at 字段作为时间。

Mongomapper 使用类似于 ActiveRecord 范围的链接查询/过滤器模型,这就是为什么 where() 和 sort() 一样返回可链接的 Plucky 查询。然后,您可以将其转换为结果数组或链接更多排序/过滤器。你也可以直接在 plucky 查询中使用像 each() 这样的枚举器。

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

  1. 返回一个勇敢的查询,过滤此帖子对象的所有 cmets
  2. 更新该查询以对 created_at 返回的 cmets 进行降序排序
  3. 从数据库中获取一组结果,并通过 each() 将它们生成给您的代码

【讨论】:

  • 所以首先我执行 all() 查询,最后添加 post.cmets.sort 或者对于 all() 结果我应该执行 .each 并排序?
  • 您可以直接调用每个,编辑上面的答案以添加一个枚举器。
猜你喜欢
  • 1970-01-01
  • 2014-11-07
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2015-07-19
  • 2012-12-08
  • 2018-01-19
相关资源
最近更新 更多