MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come eseguire più ricerche di testo utilizzando $ query di testo e $ o in mongodb / mongoose?

Quell'errore effettivo suggerisce che il tuo mongodb è una versione inferiore a 2.6 (quindi nessuna ricerca di testo in quel modo). Ma non puoi farlo comunque per due motivi.

  1. Un $or l'espressione può averne solo uno espressione di indice speciale, che può essere "testo" o "geospaziale" negli argomenti.

  2. Ti aspetti ricerche di testo su "due" campi diversi e puoi averne solo uno indice di testo per raccolta. Tuttavia, quel singolo indice può essere distribuito su più campi del documento. Ma non puoi chiedere termini di ricerca diversi per campi diversi.

Documentazione citazione :

E dovrebbe anche dire "Non puoi usare $or con un $text espressione o il $near operatore in cui entrambi sono utilizzati in più di una condizione." Ma quella piccola informazione manca, ma non puoi ancora farlo.

La tua sintassi generalmente non è corretta, ma anche con la sintassi corretta in una versione supportata di MongoDB otterresti un errore nel tentativo di usare $or così:

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

Quindi per risolvere questo è necessario:

  1. Avere una versione del server MongoDB 2.6 o successiva che supporti il ​​$text sintassi (o live con moduli di comando)

  2. Vivere con l'indicizzazione su più campi e l'utilizzo di un singolo indice.

  3. Per eseguire "query separate" al posto delle tue condizioni "o" e "combinare" i risultati nell'interfaccia dell'API client.

Questo è l'unico modo per ottenere condizioni "o" come questa con la ricerca di testo MongoDB.