Mongoid按数组长度排序

时间:2016-07-13 11:17:51

标签: ruby-on-rails mongodb sorting mongoid

  

如何使用数组的长度对Mongoid模型进行排序,该数组是模型中的一个字段。

3 个答案:

答案 0 :(得分:2)

Mongo文档says

  

您不能使用$ size来查找一系列大小(例如:数组   超过1个元素)。如果您需要查询范围,请创建一个   添加元素时增加的额外大小字段。索引   不能用于查询的$ size部分,尽管如果是其他的   包含查询表达式的索引可用于搜索   匹配查询表达式的那一部分。

因此我们无法使用mongo的$size订购。

您可以通过添加新字段来解决您的任务,该字段将存储数组大小。

class Post
  include Mongoid::Document
  field :likes, type: Array, default: []
  field :likes_size, type: Integer

  before_save do
    self.likes_size = likes.size
  end
end

posts排序likes_size

Post.order_by(likes_size: :desc)

答案 1 :(得分:1)

文件说你不能使用尺寸订购。

尝试添加一个包含size值的新列,并按顺序对其进行排序。

答案 2 :(得分:-1)

在ruby中,您可以按如下方式对数组进行排序:

my_array.sort_by(&:my_attr)

它将通过数组中每个元素的属性my_array对数组my_attr进行排序。

您也可以这样写:

my_array.sort_by{|element| element.my_attr }

完全相同,它将按每个元素的my_attr属性排序。第二种语法适用于何时需要更复杂的排序条件而不仅仅是每个元素的方法结果。

文档:http://ruby-doc.org/core-2.3.1/Enumerable.html#method-i-sort_by