Как запросить вложенные объекты из MongoDB, используя Spring Boot (REST) ​​и TextQuery? - PullRequest
0 голосов
/ 02 февраля 2020

Я пишу RESTful API для поиска в коллекции MongoDB с именем «global» по критериям, используя TextQuery. Моя проблема в том, что я не могу получить доступ к полям вложенных объектов при выполнении запроса.

Например, это работает:

GET localhost:8080/search?criteria=name:'name'

И это не так:

GET localhost:8080/search?criteria=other.othername:'Other Name'

У меня есть структура MongoDB json (импортированная из JSON в 'global 'коллекция как целые вложенные объекты)

[{
   "name": "Name",
   "desc": "Desc",
   "other" {
     "othername": "Other Name",

    }
 },
 {
   "name": "Name",
   "desc": "Desc",
   "other" {
     "othername": "Other Name",

    }
 }
]

И классы (с геттерами и сеттерами и т. д. c):

@Document(collection="global")
public class Global{
  @TextIndexed
  String name;
  @TextIndexed
  String desc;
  Other other;
  ...
}


public class Other{
  String othername;
  ...
}

Мой контроллер имеет метод

@GetMapping("/search")
 public Iterable<Global> getByCriteria(@RequestParam("criteria") String criteria) {
...
}

И я пытаюсь написать текстовый поиск с помощью

public Iterable<Global> findByCriteria(String criteria) {
        TextCriteria criteria = TextCriteria.forDefaultLanguage().matching(criteria);
        TextQuery query = TextQuery.queryText(criteria);
        return mongoTemplate.find(query, Global.class);
    }

1 Ответ

0 голосов
/ 02 февраля 2020

Вам необходимо добавить @TextIndexed в ваше поле other.

public class Global{
  @TextIndexed
  String name;
  @TextIndexed
  String desc;
  @TextIndexed
  Other other;
  ...
}

Примечание: Все поля вложенных объектов доступны для поиска

или вы можете добавить @TextIndexed для каждого поля вложенного объекта:

public class Other {
  @TextIndexed
  String othername;
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...