我在下面有相应的pogo文件
class Wrapper {
String id //document Id corresponding field
String defaultVersion
String name
List<VersionedInfo> versions
}
class VersionedInfo {
String version
.. few otherproperties
}
截至目前为了获取文档并找到与VersionedInfo相对应的默认版本,我获得了完整的文档并在版本属性列表上循环,并将版本与defaultVerion属性进行比较 即(Groovy)
Wrapper document = repository.findOne ("id")
VersionedInfo defaultVersionedInfo = document.versions.find { it.version == document.defaultVersion }
有没有更好的替代方法来查询文档,只使用投影来提取defaultVersion对应的VersionedInfo?还是QueryDSL?
答案 0 :(得分:1)
我不确定以下考虑是否应该对您有所帮助。但帮助我定义这个规则(类似)。
如果您的应用程序经常使用defaultVersion信息检索VersionedInfo数据,那么您的应用程序需要发出多个查询来解析引用。更优化的模式是将VersionedInfo数据实体嵌入defaultVersion(源文档mongoDB)。 请参阅:http://docs.mongodb.org/manual/tutorial/model-embedded-one-to-many-relationships-between-documents/
对参考文献的考虑: 使用引用时,关系的增长决定了引用的存储位置。 http://docs.mongodb.org/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/
答案 1 :(得分:0)
MongoDB聚合功能可以满足此要求。 mongodb $where query to fetch sub-document content有一个示例查询。请参阅Spring data for MongoDB
中的Aggregation Framework Support