Ich bin ein wenig verwirrt, was wäre ein guter Index (oder Indizes?) Für die Abfrage, die ich versuche zu verwenden. Diese Abfrage ist nicht eindeutig, aber es ist ziemlich genau das Wesentliche, wie meine Abfragen jetzt aussehen. Ich habe Werte durch Platzhalter ersetzt, sodass sie möglicherweise nicht sehr sinnvoll sind. Es gibt auch die Notwendigkeit, am Ende zu sortieren.mongodb - versuchen, einen zusammengesetzten Index basierend auf der Abfrage zu erstellen
{ 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}}
Ein Beispiel Dokument sieht wie folgt aus:
{
oId: 1,
login: 'login1',
locationId: 2,
prov: 'P1',
status: 'STATUS1',
group: 'group1',
createdAt: <DateTime>,
tags: ['tag1', 'tag2']
}
ich das Prinzip der verstehen, wie zusammengesetzte Indizes sollten auf einer kleinen Anzahl von Feldern gebildet werden, und doch scheint es, wie ich verstehe nicht wirklich, wie ich es in meinem Fall erreichen soll.
Jeder Eingang wird natürlich geschätzt.
Interessant. Ich habe es ausprobiert, aber es sieht so aus, als würde die Abfrage mit einem einfachen Ein-Feld-Index ({ownerId: 'hashed'} bei ~ 120ms) besser abschneiden als mit Ihrem zusammengesetzten Index (~ 2500ms). – nainy
bedeutete 'oId', nicht' ownerId', sorry – nainy
hmm. Wie viele Dokumente befinden sich in der Sammlung, die Sie abfragen? –