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
对此进行排序。因为每次我们都无法知道我们必须放置此节点的正确位置(目标相对路径)。
答案 0 :(得分:1)
如果您有
等结构,则可能不需要查询/pending/1
/pending/2
...
/pending/999
您可以使用JCR节点的getNodes()方法迭代节点,该方法返回NodeIterator。
sling:orderedFolder节点类型为“pending”提供了可预测的子节点排序。
通常,在JCR中使用树结构而不是查询更有效。
另请注意,如果您使用的Jackrabbit在同一个父级上拥有超过10,000个子节点,则可能会导致性能问题。