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
嗯。您正在查询的集合中有多少个文档? –