springdata mongo嵌套属性查询

时间:2014-03-24 16:03:27

标签: mongodb spring-data querydsl spring-mongo

我在下面有相应的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?

2 个答案:

答案 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