私は採用しようとしているクエリのインデックス(またはインデックス)が何であるかについて少し混乱しています。このクエリは一意ではありませんが、クエリがどのように表示されるかの要点になります。私は値をプレースホルダに置き換えたので、多くの意味がないかもしれません。最後にソートする必要もあります。mongodb - クエリに基づいて複合インデックスを作成しようとしています
{ oId: 1,
status: { '$in': [ 'STATUS1', 'STATUS2' ] },
'$and':
[ { '$or':
[ { '$or':
[ { prov: 'P1',
'$or': [ { tags: { '$in': [ 'tag1' ] } } ] },
{ prov: 'P2',
'$or': [ { tags: { '$in': [ 'tag1' ] } } ] },
{ prov: 'P3',
'$or': [ { tags: { '$in': [ 'tag1' ] } } ] },
{ prov: 'P4',
'$or': [ { tags: { '$in': [ 'tag1' ] } } ] } ] },
{ '$or':
[ { prov: 'P1',
login: { '$in': [ 'login1' ] } },
{ prov: 'P2',
login: { '$in': [ 'login2' ] } },
{ prov: 'P3',
login: { '$in': [ 'login1' ] } },
{ prov: 'P3',
login: { '$in': [ 'login3' ] } } ] },
{ '$or':
[ { prov: 'P3',
group: { '$in': [ 'group1' ] } } ] },
{ '$or':
[ { prov: 'P2',
locationId: { '$in': [ '1', '2' ] } } ] } ] },
{ '$or':
[ { prov: 'P1',
'$or':
[ { group: 'group2' },
{ login: 'login5' } ] },
{ prov: 'P2',
'$or':
[ { group: 'group3' },
{ login: 'login3' } ] },
{ prov: 'P3',
'$or': [ { login: 'login3' } ] },
{ prov: 'P4',
'$or': [ { login: 'login3' } ] } ] } ] }, {sort: {createdAt: -1}}
例文書は次のようになります。
{
oId: 1,
login: 'login1',
locationId: 2,
prov: 'P1',
status: 'STATUS1',
group: 'group1',
createdAt: <DateTime>,
tags: ['tag1', 'tag2']
}
私はフィールドの数が少ない上に形成する方法化合物インデックスの原理を理解し、まだそれは私のように思えます私が自分の場合にどのように達成するのかを本当に理解していない。
もちろん、どんな入力も高く評価されています。
興味深い。私はこれを試しましたが、複合インデックス(〜2500ms)とは対照的に、単純な1フィールドインデックス({ownerId: 'hashed'}〜120ms)でクエリがうまく実行されるようです。 – nainy
は 'ownerId'ではなく' oId'を意味しました。申し訳ありません – nainy
hmm。照会しているコレクション内の文書はいくつありますか? –