如何使用数组的长度对Mongoid模型进行排序,该数组是模型中的一个字段。
答案 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