Existem algumas opções que você pode usar com a pesquisa de texto para atender a essas necessidades. Considere os seguintes documentos:
{ "text" : "cake" }
{ "text" : "sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale" }
{ "text" : "dress sale" }
{ "text" : "cake sale monday" }
A "lista" padrão de palavras é uma ou inclusão, mas se você não quiser um e inclusão você "cita" as palavras:
db.words.find( { "$text": { "$search": "\"cake\" \"sale\"" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale monday" }
Se você deseja excluir uma palavra, então você prefixa com
-
:db.words.find( { "$text": { "$search": "\"cake\" \"sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
E se você quiser parte disso como uma frase exata então você "cita" a frase inteira:
db.words.find( { "$text": { "$search": "\"cake sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
As palavras derivadas, no entanto, têm um problema, então:
db.words.find( { "$text": { "$search": "test -testing" } },{_id: 0})
Na verdade, não retornaria um resultado.
Consulte a documentação no
$text
operador para exemplos. Nem todos estão lá no momento, mas está melhorando.