sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB Nelze kanonizovat dotaz:BadValue Příliš mnoho textových výrazů

Chyba je docela přesná. To, co se snažíte udělat, je vytvořit „více textových dotazů“ uvnitř $or stav. MongoDB to neumí a je to ve skutečnosti uvedeno v prvním řádku Omezení na stránce manuálu pro $text .

Navíc to předpokládám k tomu, ale raději zadejte jeden textový index ve vaší sbírce, abyste mohli v případě potřeby vyhledávat ve více polích:

db.collection.ensureIndex({ "comments": "text", "title": "text" })

A pak pravděpodobně budete chtít přiřadit váhy jak je uvedeno zde .

Ale zdá se, že vše, co opravdu požadujete, je hledat „více výrazů“. Takže nepoužíváte $or za tímto účelem stačí odeslat seznam výrazů oddělených mezerami:

db.collection.find({ "$text": { "$search": "something else" } })

Jakákoli slova v seznamu odděleném mezerou jsou pak vyhledána v kontextu jakýchkoli polí v textovém indexu a bude vrácen jakýkoli dokument, který obsahuje „jakékoli“ z těchto slov. S výsledky seřazenými podle "váhy" více shod slov v tomto seznamu.




  1. Je ideální, když MongoDB používá 150 MB paměti?

  2. Aktualizujte pole MongoDB pomocí hodnoty jiného pole

  3. PHP MongoDB agreguje $match a $group a $addToSet

  4. Jak získám objectID po uložení objektu v Mongoose?