Il existe quelques options que vous pouvez utiliser avec la recherche de texte pour répondre à ces besoins. Considérez les documents suivants :
{ "text" : "cake" }
{ "text" : "sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale" }
{ "text" : "dress sale" }
{ "text" : "cake sale monday" }
La "liste" de mots par défaut est un ou l'inclusion, mais si vous ne voulez pas un et inclusion vous "citez" les mots :
db.words.find( { "$text": { "$search": "\"cake\" \"sale\"" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
{ "text" : "cake sale monday" }
Si vous souhaitez exclure un mot puis vous préfixez avec -
:
db.words.find( { "$text": { "$search": "\"cake\" \"sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
{ "text" : "sale cake" }
Et si vous vouliez en faire partie sous la forme d'une expression exacte puis vous "citez" la phrase entière :
db.words.find( { "$text": { "$search": "\"cake sale\" -monday" } },{_id: 0})
{ "text" : "cake sale" }
Les mots radicaux ont cependant un problème, donc :
db.words.find( { "$text": { "$search": "test -testing" } },{_id: 0})
Ne renverrait pas réellement de résultat.
Voir la documentation sur le $text
opérateur pour des exemples. Tous ne sont pas là pour le moment, mais ça va mieux.