sql >> Databáze >  >> NoSQL >> MongoDB

Jak provádět více textové vyhledávání pomocí $textového dotazu a $nebo v mongodb / mongoose?

Tato skutečná chyba naznačuje, že váš mongodb je verze nižší než 2.6 (takže žádné textové vyhledávání tímto způsobem). Ale stejně to nemůžete udělat ze dvou důvodů.

  1. $or výraz může mít pouze jeden speciální indexový výraz, který je buď "text" nebo "geoprostorový" v argumentech.

  2. Očekáváte textové vyhledávání ve „dvou“ různých polích a můžete mít pouze jedno textový index na kolekci. Tento jediný index však lze rozložit do několika polí v dokumentu. Ale nemůžete se ptát na různé hledané výrazy pro různá pole.

Dokumentace citát :

A také by tam mělo být uvedeno „Nemůžete použít $or s $text výraz nebo $near operátor, kde se oba používají ve více než jedné podmínce." Ale tato malá informace chybí, ale stále to nemůžete udělat.

Vaše syntaxe obecně není správná, ale i se správnou syntaxí v podporované verzi MongoDB byste při pokusu o použití $or dostali chybu takhle:

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

K vyřešení tohoto problému potřebujete:

  1. Chcete-li mít server MongoDB verze 2.6 nebo vyšší, který podporuje $text syntaxe (nebo žít s příkazovými formuláři)

  2. Chcete-li žít s indexováním více polí a používáním jednoho indexu.

  3. Chcete-li provést „samostatné dotazy“ místo vašich podmínek „nebo“ a „zkombinovat“ výsledky v rozhraní API klienta.

To je jediný způsob, jak získat podmínky „nebo“ jako je tato s textovým vyhledáváním MongoDB.



  1. 2 způsoby, jak omezit dokumenty vrácené v MongoDB

  2. Jak mohu použít async-await s MongoClient

  3. Konfigurace nasazení Redis – replikace master slave

  4. Vyberte Odpovídající prvek pole a Vraťte vybraná pole