JCR-SQL2查询含指定组件的页面无结果,求排查语句问题
你的JCR-SQL2查询问题分析及修正
你的查询语句存在两个关键问题,导致无法返回预期结果:
节点关联逻辑错误
AEM中cq:Page节点的直接子节点是cq:Content,组件(比如你要找的image组件)实际是挂载在cq:Content的子节点层级下,并非直接作为cq:Page的子节点。你用ISCHILDNODE(component,page)只能匹配直接属于cq:Page的component节点,这在AEM的节点结构里不存在,自然关联不到任何数据。路径匹配缺少通配符
page.[jcr:path] LIKE '/content'只会匹配路径完全等于/content的节点,而你要查找的是/content目录下的所有页面,必须加上通配符%,写成'/content/%'才能匹配子路径。
修正后的查询语句
SELECT page.* FROM [cq:Page] AS page INNER JOIN [cq:PageContent] AS content ON ISCHILDNODE(content, page) INNER JOIN [nt:base] AS component ON ISCHILDNODE(component, content) WHERE component.[sling:resourceType] = '/libs/wcm/foundation/components/image' AND page.[jcr:path] LIKE '/content/%'
额外优化提示
- 如果要匹配继承自目标组件的自定义组件(比如基于foundation image扩展的组件),可以用
ISDESCENDANTNODE(component, [/libs/wcm/foundation/components/image])代替直接等于,但注意该写法可能会影响查询性能。 ISCHILDNODE默认支持递归查找所有子层级的节点,无需额外配置即可匹配嵌套在深层的组件。
内容的提问来源于stack exchange,提问作者superninja
相关产品推荐
相关产品推荐

