イベント ドキュメントの大規模な (数十万) コレクション (たとえば、以下を参照) がある場合、_idが( n )より大きい最初のイベントを取得する最もパフォーマンスの高い方法は何ですか?
文書例
{
_id: NumberLong(352757), // Uniqueness guaranteed
type: "BallDropped",
createdAt: "2014-01-01T00:00:00Z",
// ... followed by dynamic properties of unknown size
}
現在の実装
多くのイベントのコレクションを指定して、_id が 35 より大きい最初のイベントを取得します。
まず、集計を使用してイベントのIDを取得します。
これは、サイズが不明な完全なドキュメントを循環するよりも、投影フェーズ (ID のみを返す) の方がパフォーマンスが高いと想定して行います。
db.events.aggregate(
{ $project: { _id: 1 } },
{ $match: { _id: { $gt: NumberLong(35) } } },
{ $sort: { _id: 1 } },
{ $limit: 1 }
)
次に、返された _id を使用して findOne を呼び出し、そのドキュメントを取得します。
あなたの考えは何ですか?