Sie sollten einen Textindex für die zu durchsuchenden Felder erstellen:
db.deals.ensureIndex({ name: "text", description : "text", category : "text" });
Aus der Dokumentation des $text-Operators:
$text führt eine Textsuche nach dem Inhalt der Felder durch, die mit einem Textindex indiziert sind.
Der Index, den Sie für Ihre drei Felder erstellt haben, ist ein zusammengesetzter Index, kein Textindex. Der Textindex sieht folgendermaßen aus:
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "name_text_description_text_category_text",
"ns" : "test.deals",
"weights" : {
"category" : 1,
"description" : 1,
"name" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 2
}