MongoTemplate如何包含DBref的特定字段

时间:2013-11-09 01:29:46

标签: mongodb spring-data dbref spring-mongo

嗨我有内部有章节的问题结构,章节对BookEdition有DBref而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");

工作正常,但如果我只想要章节ID

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");

它没有提取章节ID,预订。我希望我能够解释我的问题。有没有办法指定要包含的DBRef的特定字段?

1 个答案:

答案 0 :(得分:3)

您无法为DBRef定义字段规范,因为它们只能一次性获取所有字段。通常建议使用DBRefs(不是我们,而是由MongoDB人员实际看到reference documentation),但是要在应用程序代码中处理相关对象。这意味着您宁愿存储ID,然后继续发出专门的查询来解析相关对象。这允许您在加载相关对象时再次使用字段规范。