MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB Impossible de canoniser la requête :BadValue Trop d'expressions de texte

L'erreur est assez exacte. Ce que vous essayez de faire est de créer des "requêtes de texte multiples" dans un $or condition. MongoDB ne peut pas faire cela et c'est en fait indiqué dans la première ligne de Restrictions dans la page de manuel pour $text .

De plus, vous n'êtes pas censé pour ce faire, mais spécifiez plutôt un index de texte sur votre collection pour rechercher sur plusieurs champs si nécessaire :

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

Et ensuite, vous voudrez probablement attribuer des poids comme indiqué ici .

Mais il semble que tout ce que vous demandez, c'est de rechercher "plusieurs termes". Donc, vous n'utilisez pas de $or pour cela, mais soumettez simplement la liste des termes séparés par des espaces :

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

Tous les mots de la liste délimitée par des espaces sont ensuite recherchés dans le contexte des champs de l'index de texte, et tout document contenant "l'un" de ces mots sera renvoyé. Avec les résultats classés par "poids" de plusieurs correspondances des mots de cette liste.