MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como fazer pesquisa de texto múltiplo usando $ consulta de texto e $ ou em mongodb / mongoose?


Esse erro real sugere que seu mongodb é uma versão inferior a 2.6 (portanto, nenhuma pesquisa de texto dessa maneira). Mas você não pode fazer isso de qualquer maneira por duas razões.

  1. Um $or expressão só pode ter um expressão de índice especial, sendo "texto" ou "geoespacial" nos argumentos.

  2. Você espera pesquisas de texto em "dois" campos diferentes e só pode ter um índice de texto por coleção. No entanto, esse índice único pode ser distribuído por vários campos no documento. Mas você não pode pedir termos de pesquisa diferentes para campos diferentes.

Documentação cotação :

E também deve dizer "Você não pode usar $or com um $text expressão ou o $near operador onde ambos são usados ​​em mais de uma condição." Mas esse pequeno pedaço de informação está faltando, mas você ainda não pode fazê-lo.

Sua sintaxe geralmente não está correta, mas mesmo com a sintaxe correta em uma versão suportada do MongoDB, você obteria um erro ao tentar usar $or assim:
Error: error: {
    "$err" : "Can't canonicalize query: BadValue Too many text expressions",
    "code" : 17287
}

Então, para resolver isso, você precisa:

  1. Para ter uma versão do servidor MongoDB de 2.6 ou superior que suporte o $text sintaxe (ou viva com formulários de comando)

  2. Viver com a indexação em vários campos e usando um único índice.

  3. Para executar "consultas separadas" no lugar de suas condições "ou" e "combinar" os resultados na interface da API do cliente.

Essa é a única maneira de obter condições "ou" como essa com a pesquisa de texto do MongoDB.