1

我有以下文件对应的 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 ?还是查询DSL?

4

2 回答 2

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/

于 2014-03-24T16:46:13.293 回答
0

MongoDB 聚合功能可以满足这一要求。 用于获取子文档内容的 mongodb $where 查询有一个示例查询。参考MongoDBAggregation Framework SupportSpring 数据

于 2014-04-08T16:30:36.680 回答