0

我可以在数据库中对我的用户进行排序,这样我每次查询时都不必说 order_by("created_at desc") 吗?

听起来对我来说是一件合乎逻辑的事情,但我不知道这是否可能以及它是否是最佳实践?

解决方案

我已经在使用 default_scope 并且据我所知,这是最好的方法吗?非常感谢您的回答。

4

3 回答 3

2

如果您在按create date desc排序的结果之后,反向自然顺序将接近此(但不保证相同)。

如果您需要特定的排序,添加order_by()到索引查询是确保这一点的最佳方式。

如果您使用默认生成的ObjectId,前 4 个字节实际上是一个 unix 时间戳(自纪元以来的秒数)..除了文档中提到的一些例外情况外,该_id字段默认为索引。

因此,在 mongo shell 中创建的最近 50 个用户(基于 ObjectId)的查询将是:

db.users.find().sort({_id:-1}).limit(50)
于 2012-07-05T01:32:30.787 回答
1

关于默认范围有不同的看法,但要实现您的要求:

http://apidock.com/rails/ActiveRecord/Base/default_scope/class

class User < ActiveRecord::Base
  default_scope order('created_at DESC')
  ### other model code here ###
end
于 2012-07-05T01:22:55.277 回答
0

您应该能够向您的数据库表添加一个或多个索引。在实时系统上运行它时要小心,因为在大表上创建索引的开销可能会被禁用。

编辑:应该扩大。

通过创建索引,您仍然需要订购,但您的订购/排序会更有效率。

ref:是否可以将数据库索引添加到已经有数据的数据库中?

于 2012-07-05T01:14:10.333 回答