在我的Adobe CQ5情况下,查询将是什么

时间:2013-05-30 10:24:34

标签: jackrabbit cq5 jcr crx jcr-sql2

Root包含一个名为 sling:文件夹的名为待处理的文件夹。

具有 nt:unstructured 类型的节点数,具有长值的名称,该长值对于我的代码处理非常重要。

现在,我希望从待处理文件夹中获取前20个节点(20个最小节点名称,即长值)数据。

您能告诉我如何针对这种情况编写JCR查询吗?

编辑第1号

Repository repository = JcrUtils.getRepository("http://localhost:4502/crx/server");
Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));

// Obtain the query manager for the session via the workspace ...
QueryManager queryManager = session.getWorkspace().getQueryManager();    
// Create a query object ...

String expression = "SELECT * FROM [nt:base] AS s WHERE ISDESCENDANTNODE([/pending])";
Query query = queryManager.createQuery(expression, javax.jcr.query.Query.JCR_SQL2);

// Execute the query and get the results ...
QueryResult result = query.execute();

// Iterate over the nodes in the results ...

NodeIterator nodeIter = result.getNodes();

但它提供了一些顺序,不同于根节点中存在的顺序。但这不是排序形式。

编辑2号

现在我获得了这个功能的功能。它现在工作正常。我得到的是在目标节点上方订购节点,这在该函数的第二个参数中提到。

但即将到来的节点名称不同(数字)。那么如何使用orderBefore对此进行排序。因为每次我们都无法知道我们必须放置此节点的正确位置(目标相对路径)。

1 个答案:

答案 0 :(得分:1)

如果您有

等结构,则可能不需要查询
/pending/1
/pending/2
...
/pending/999

您可以使用JCR节点的getNodes()方法迭代节点,该方法返回NodeIterator。

sling:orderedFolder节点类型为“pending”提供了可预测的子节点排序。

通常,在JCR中使用树结构而不是查询更有效。

另请注意,如果您使用的Jackrabbit在同一个父级上拥有超过10,000个子节点,则可能会导致性能问题。