0

クエリを実行するたびに order_by("created_at desc") と言う必要がないように、データベース内のユーザーを並べ替えることができますか?

私には論理的なことのように思えますが、それが可能かどうか、そしてそれがベストプラクティスであるかどうかはわかりませんか?

解決

私はすでに default_scope を使用していますが、あなたから理解しているように、それが最善の方法ですか? しかし、答えてくれてありがとう。

4

3 に答える 3

2

結果をcreatedatedescでソートした後の場合、自然の逆順はこれに近くなります(ただし、同一であるとは限りません)。

特定の順序が必要な場合order_by()は、インデックス付きクエリに追加することがこれを保証する最良の方法です。

デフォルトで生成されたObjectIdを使用している場合、最初の4バイトは実際にはUNIXタイムスタンプ(エポックからの秒数)です..ドキュメントに記載されているいくつかの例外を除いて、_idフィールドはデフォルトでインデックス付けされます。

したがって、mongoシェルで(ObjectIdに基づいて)作成された最後の50ユーザーのようなクエリは次のようになります。

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

1つまたは複数のインデックスをdbテーブルに追加できるはずです。大きなテーブルにインデックスを作成するためのオーバーヘッドが無効になる可能性があるため、これを稼働中のシステムで実行する場合は注意が必要です。

編集:拡張する必要があります。

インデックスを作成することにより、注文する必要がありますが、注文/並べ替えはより効率的になります。

ref:すでにデータがあるデータベースにデータベースインデックスを追加しても大丈夫ですか?

于 2012-07-05T01:14:10.333 に答える