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

Comment faire une recherche de texte multiple en utilisant $text query et $or dans mongodb/mongoose ?

Cette erreur réelle suggère que votre mongodb est une version inférieure à 2.6 (donc pas de recherche de texte de cette façon). Mais vous ne pouvez pas le faire de toute façon pour deux raisons.

  1. Un $or l'expression ne peut en avoir qu'une expression d'index spéciale, étant soit "text" soit "geospatial" dans les arguments.

  2. Vous vous attendez à des recherches de texte sur "deux" champs différents et vous ne pouvez en avoir qu'un index de texte par collection. Cependant, cet index unique peut être réparti sur plusieurs champs du document. Mais vous ne pouvez pas demander différents termes de recherche pour différents champs.

Documentation citation :

Et il devrait également dire "Vous ne pouvez pas utiliser $or avec un $text expression ou le $near opérateur où l'un ou l'autre est utilisé dans plus d'une condition." Mais cette petite information manque, mais vous ne pouvez toujours pas le faire.

Votre syntaxe n'est généralement pas correcte, mais même avec la syntaxe correcte dans une version prise en charge de MongoDB, vous obtiendrez une erreur en essayant d'utiliser $or comme ceci :

Error: error: {
    "$err" : "Can't canonicalize query: BadValue Too many text expressions",
    "code" : 17287
}

Donc, pour résoudre ce problème, vous avez besoin :

  1. Avoir une version de serveur MongoDB de 2.6 ou supérieure qui prend en charge le $text syntaxe (ou vivre avec les formulaires de commande)

  2. Pour vivre avec l'indexation sur plusieurs champs et l'utilisation d'un seul index.

  3. Pour exécuter des "requêtes séparées" à la place de vos conditions "ou" et "combiner" les résultats dans votre interface API client.

C'est la seule façon d'obtenir des conditions "ou" comme celle-ci avec la recherche de texte MongoDB.