データベース内にリクエストテーブルがあり、リクエストが処理されていないことを示す「保留中」、ミリ秒単位の有効期限(エポック)を追跡する「有効期限」、「カウント」などのいくつかのフィールドで構成されています。リクエストが発生するたびに 0 までカウントダウンします。
ここで、リクエストの有効期限が切れているか、カウントが 0 に減少し、保留中が true であるすべてのリクエストを検索します。次に、有効期限に基づいて結果を並べ替えます。
このためのインデックスを作成しようとしましたが、explain() コマンドの結果に基づいて、MongoDB がインデックスを使用していないと確信しています。そのようなクエリの複合インデックスとは何かについて何か提案はありますか?
一般的な用語で言えば、クエリは本質的に (A OR B) AND C が C によって並べ替えられます。
これは、Java の Morphia を介して作成したクエリです (MongoDB は初めてです) ->
query.and(query.criteria("pending").equal(true));
query.or(query.criteria("count").equal(0), query.criteria("expiry").lessThan(System.currentTimeMillis()));
query.order("expiry");