MongoTemplate как включить определенные поля DBref

Привет у меня есть структура, называемая проблемой, которая внутренне имеет главу, глава имеет DBref для BookEdition и BookEdition имеет DBRef для книги

Problem {
  String name,
  @DBRef
  Chapter chapter;
}
Chapter {
  String name,
  @DBRef 
  BookEdition edition;
}
BookEdition {
  String name,
  Book book;

}

если я просто получаю проблему, что для ее извлечения требуется много времени, поэтому я просто хочу включить нужную мне информацию с помощью fields().include(), но я не могу найти поля DBRefed, такие как глава, книга или книга

Query q = new Query().addCriteria(Criteria.where("html").ne("").ne(null)
                    .and("chapter.$id").ne(""));
            q.fields().include("id")
            .include("name")
            .include("html");

Работает нормально, но если я просто хочу идентификатор главы

Query q = new Query().addCriteria(Criteria.where("html").ne("").ne(null)
                    and("chapter.$id").ne(""));
     q.fields().include("id")
     .include("name")
     .include("html")
     .include("chapter._id")
     .include("chapter.bookEdition.isbn13")
     .include("chapter.$bookEdition.$editionNumber")
     .include("chapter.$bookEdition.$book.subjectId")
     .include("chapter.$bookEdition.$book.title");

Он не получает идентификатор главы, bookedition. Я надеюсь, что смогу объяснить свой вопрос. Есть ли способы указать конкретное поле DBRef для включения?

1 ответ

Решение

Вы не можете определить спецификации полей для DBRef, так как они могут быть получены только для всех полей одновременно. Обычно рекомендуется не использовать DBRefs (не нами, а на самом деле разработчиками MongoDB, см. Справочную документацию), но позаботиться о связанных объектах в коде вашего приложения. Это означает, что вы предпочитаете сохранить идентификатор, а затем выполнить специальный запрос для разрешения связанных объектов. Это позволяет вам снова использовать спецификации полей при загрузке связанных объектов.

Другие вопросы по тегам