0
對於我嘗試使用的查詢,什麼是好的索引(或索引?),我有點困惑。這個查詢不是唯一的,但它幾乎是我的查詢現在的樣子。我用佔位符替換了值,所以它們可能沒有多大意義。最後還需要進行分類。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']
}
我明白如何複合索引應該在少數領域的形成原理,但它似乎像我真的不明白我是如何在我自己的情況下完成它的。
當然,任何輸入都是讚賞的。
有趣。我已經嘗試了這一點,但似乎查詢在一個簡單的單一字段索引({ownerId:'hashed'}在〜120ms)上表現更好,而不是你的複合索引(〜2500ms)。 – nainy
意味着'oId',而不是'ownerId',對不起 – nainy
嗯。您正在查詢的集合中有多少個文檔? –