0

根目录包含一个文件夹,名为pending类型为sling:folder

具有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();

但它给出了一些顺序,与根节点中存在的顺序不同。但这不是排序形式。

编辑 No.2

现在我得到了这个函数的功能。现在它工作正常。我得到的是对目标节点上方的节点进行排序,这在此函数的第二个参数中提到。

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

4

1 回答 1

1

如果您具有以下结构,您可能不需要对此进行查询

/pending/1
/pending/2
...
/pending/999

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

“待处理”的 sling:orderedFolder 节点类型给出了子节点的可预测排序。

一般来说,在 JCR 中使用树结构而不是查询更有效。

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

于 2013-05-31T08:37:29.357 回答