0

イベント ドキュメントの大規模な (数十万) コレクション (たとえば、以下を参照) がある場合、_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 を呼び出し、そのドキュメントを取得します。

あなたの考えは何ですか?

4

0 に答える 0