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

Hvordan laver man flere tekstsøgninger ved hjælp af $text-forespørgsel og $or i mongodb / mongoose?

Den faktiske fejl antyder, at din mongodb er en version mindre end 2.6 (så ingen tekstsøgning på den måde). Men du kan ikke gøre det alligevel af to grunde.

  1. En $or udtryk kan kun have én særligt indeksudtryk, der enten er "tekst" eller "geospatial" i argumenterne.

  2. Du forventer tekstsøgninger på "to" forskellige felter, og du kan kun have et tekstindeks pr. samling. Det enkelte indeks kan dog spredes over flere felter i dokumentet. Men du kan ikke spørge om forskellige søgeord for forskellige felter.

Dokumentation citat :

Og der skulle også stå "Du kan ikke bruge $or med en $text udtryk eller $near operator, hvor begge bruges i mere end én tilstand." Men det lille stykke information mangler, men du kan stadig ikke gøre det.

Din syntaks er generelt ikke korrekt, men selv med den korrekte syntaks i en understøttet version af MongoDB vil du få en fejl ved at prøve at bruge $or sådan her:

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

Så for at løse dette har du brug for:

  1. At have en MongoDB-serverversion af 2.6 eller nyere, der understøtter $text syntaks (eller leve med kommandoformer)

  2. At leve med at indeksere over flere felter og bruge et enkelt indeks.

  3. At udføre "separate forespørgsler" i stedet for dine "eller"-betingelser og "kombinere" resultaterne i din klient-API-grænseflade.

Det er den eneste måde, du får "eller"-betingelser som denne med MongoDB-tekstsøgning.



  1. Hvordan kan jeg implementere denne enkelte samtidighedsdistribuerede kø i enhver MQ-platform?

  2. Måde at sænke hukommelsesforbruget af mongoose, når de laver forespørgsler

  3. Samlede værdier fra alle nøgler i underdokument

  4. Hvordan kan jeg tilføje et unikt id med to kolonner til mongodb i en meteor-app?