Поиск Querydsl с использованием коллекции MongoDB и DocumentReferenced (внутренней) и веб-поддержки. ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Поиск Querydsl с использованием коллекции MongoDB и DocumentReferenced (внутренней) и веб-поддержки.

Сообщение Anonymous »

При изучении Spring Data и MongoDB у меня возникла просьба запросить коллекцию с ее собственными полями. Querydsl — лучший выбор из того, что я видел.
У меня есть эти коллекции

Код: Выделить всё

@Data
@Builder
@Document(collection = "subject")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Subject {

@Id
private String id;

@Field("full_name")
private String fullName;

@Field("subject_yupe")
@DocumentReference(lazy = true)
private SubjectType subjectType;

// other fields
}

@Data
@Builder
@Document(collection = "subjecttype")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SubjectType {

@Id
private String id;

@Indexed(unique = true)
@Field("name")
private String name;
}
Этот репозиторий

Код: Выделить всё

@Repository
public interface SubjectRepository extends MongoRepository, QuerydslPredicateExecutor, QuerydslBinderCustomizer {

@Override
default void customize(QuerydslBindings bindings, QSubject subject) {
bindings.bind(String.class).first((StringPath path, String value) -> path.containsIgnoreCase(value));
}
}
Этот метод контроллера

Код: Выделить всё

@GetMapping("/search")
public ResponseEntity search(@QuerydslPredicate(root = Subject.class) Predicate predicate) {
log.debug("REST request to search Subject by parameters: {}", predicate);
// call the service that calls the repository and cast the result as List and map it
return ResponseEntity.ok(subjectService.findAll(predicate));
}
Когда я ищу по одному из полей темы, все работает без проблем, у меня также есть правильный результат, следуя журналу запроса Mongo:

Код: Выделить всё

2022-12-12 21:58:31.505 DEBUG 5816 --- [nio-8080-exec-4] o.s.data.mongodb.core.MongoTemplate      : find using query: { "full_name" : { "$regularExpression" : { "pattern" : ".*\\Qgius\\E.*", "options" : "i"}}} fields: Document{{}} for class: class it.XXXXXXXXX.collections.Subject in collection: subject
Если я попытаюсь сделать то же самое с полем типа субъекта, запрос будет правильным, но результатом будет пустой массив

Код: Выделить всё

2022-12-12 22:03:09.590 DEBUG 5816 --- [nio-8080-exec-7] o.s.data.mongodb.core.MongoTemplate      : find using query: { "subject_type.name" : { "$regularExpression" : { "pattern" : ".*\\QEntit\\E.*", "options" : "i"}}} fields: Document{{}} for class: class it.XXXXXXXXX.collections.Subject in collection: subject
По моему мнению, поскольку документ связан, он не будет работать так, как если бы он был встроен. Если я попытаюсь найти идентификатор, у меня все равно возникнут проблемы (не то чтобы, когда я указываю subjectType.id, в запросе указан только subjectType):

Код: Выделить всё

2022-12-12 22:05:25.211 DEBUG 5816 --- [io-8080-exec-10] o.s.data.mongodb.core.MongoTemplate      : find using query: { "subject_type" : { "$regularExpression" : { "pattern" : ".*\\Q63905c45051ce75d9b060edf\\E.*", "options" : "i"}}} fields: Document{{}} for class: class it.XXXXXXXXX.collections.Subject in collection: subject
Я действительно затрудняюсь, есть ли способ найти в коллекции значение ее внутренней (не встроенной) коллекции? Даже удостоверение было бы здорово.

Подробнее здесь: https://stackoverflow.com/questions/747 ... -and-web-s

Вернуться в «JAVA»