habe ich einigen Test auf meinem lokalen mit einigen Beispieldatensätzen und ich denke, dass die beste Option, um einen Index für „category_1_score_1_username_1“
einen Index für die folgenden Felder zu erstellen wäre Erstellen gibt Ihnen eine Abfrage abgedeckt und damit die Dokumente werden direkt aus dem Index zurückgegeben.
unter meiner Analyse finden
> db.usr.find();
{ "_id" : ObjectId("57bd20630744bd376277a795"), "username" : "Bob", "score" : 10, "category" : "mostLikes" }
{ "_id" : ObjectId("57bd20630744bd376277a796"), "username" : "John", "score" : 32, "category" : "mostLikes" }
{ "_id" : ObjectId("57bd20630744bd376277a797"), "username" : "Bob1", "score" : 2, "category" : "leastDeaths" }
{ "_id" : ObjectId("57bd20630744bd376277a798"), "username" : "John2", "score" : 132, "category" : "mostLikes" }
{ "_id" : ObjectId("57bd20630744bd376277a799"), "username" : "Bob3", "score" : 20, "category" : "leastDeaths" }
{ "_id" : ObjectId("57bd20630744bd376277a79a"), "username" : "John4", "score" : 132, "category" : "mostLikes" }
{ "_id" : ObjectId("57bd20630744bd376277a79b"), "username" : "Bob5", "score" : 22, "category" : "leastDeaths" }
{ "_id" : ObjectId("57bd20630744bd376277a79c"), "username" : "John6", "score" : 322, "category" : "mostLikes" }
{ "_id" : ObjectId("57bd20630744bd376277a79d"), "username" : "Bob7", "score" : 232, "category" : "leastDeaths" }
{ "_id" : ObjectId("57bd20630744bd376277a79e"), "username" : "John8", "score" : 3112, "category" : "mostLikes" }
{ "_id" : ObjectId("57bd20630744bd376277a79f"), "username" : "Bob4", "score" : 222, "category" : "leastDeaths" }
{ "_id" : ObjectId("57bd20630744bd376277a7a0"), "username" : "John22", "score" :, "category" : "mostLikes" }
{ "_id" : ObjectId("57bd20630744bd376277a7a1"), "username" : "Bob33", "score" : 2111, "category" : "leastDeaths" }
Indizes:
> db.usr.getIndexes();
{
"v" : 1,
"key" : {
"category" : 1,
"score" : 1,
"username" : 1
},
"name" : "category_1_score_1_username_1",
"ns" : "test.usr"
}
]
>
Jetzt können Sie Ihre Anfrage leicht ändern, um es über eine überdachte Abfrage zu machen zurückzukehren.
So wie Sie die Ausgabe sehen können, ist die Anzahl der gescannten Dokumente 0, während die Datensätze direkt aus dem Index abgerufen werden. Die Auswahl dieses Index wäre also die beste Wahl für die erste Abfrage.
Für die zweite Abfrage sollte das einfach sein, einen Index für das Feld Benutzername zu erstellen, und das sollte die zweite Abfrage für Sie lösen.
HTH.
hey @RainingChain können Sie bitte die Antwort akzeptiert markieren, wenn Sie denken, dass dies geholfen und überzeugt. – user641887