Używam MongoTemplate do konstruowania zapytania, które wyszukuje ciąg (dokładnie tak, jak LIKE %abc% w języku SQL) w wielu polach. Mam więc obiekt taki jak:

{
  "location": "Pacific",
  "status": "Closed",
  "badge": "220394"
}

CZEGO PRÓBOWAŁEM :

Teraz napisałem zapytanie takie jak:

Criteria freeTextCriteria = Criteria.where("badge").regex(".*" + freeText + ".*", "i");
dynamicQuery.addCriteria(freeTextCriteria);

Ten powrót powyżej obiektu tylko wtedy, gdy przekażę freeText jako 2039, ale nie zwracam żadnych wyników, gdy przekażę freeText jako 220394 (pełna wartość). Dlaczego to się dzieje?

Muszę również wykonać to zapytanie dla wielu pól. Zatem 2039 powinno pasować do location LUB status LUB badge. Kiedy uruchamiam poniższe zapytanie:

Criteria freeTextCriteria = 
    Criteria.where("location").regex(".*" + freeText + ".*", "i")
        .orOperator(Criteria.where("badge").regex(".*" + freeText + ".*", "i"));
dynamicQuery.addCriteria(freeTextCriteria);

Powyższe nie zwraca żadnych wyników nawet z częściowymi tekstami. Jak mogę to rozwiązać?

1
Shubham A. 26 grudzień 2019, 19:12

1 odpowiedź

Najlepsza odpowiedź
Criteria freeTextCriteria = new Criteria();
freeTextCriteria.orOperator(Criteria.where("location").regex(".*"+ freeText +".*"), Criteria.where("badge").regex(".*"+ freeText +".*"));
Query dynamicQuery = new Query(freeTextCriteria);
mongoTemplate.find(dynamicQuery, <Yourclass>.class, "collectionName");

To będzie działać.

1
Naveen Negi 26 grudzień 2019, 16:25