Как применить агрегатные функции (такие как MIN, MAX, COUNT) в JCR-SQL2?
У меня есть некоторые записи, хранящиеся как узлы в JCR, и имя узла является первичным ключом. например 1,2,3. Но проблема начинается здесь,
записи следующие 1,2,6,53,54
Где числа выше - узлы под неструктурированным узлом EMP. Если я сделаю
int count=empNode.getNodeIterator().getSize()
Я получу 5 Как есть 5 узлов
Поэтому я считаю count++, который дает мне 6, но 6 уже существует, поэтому я не могу создать узел с именем 6 под EMP[nt:unstructred], поэтому я хочу применить MAX(nodeNames) что-то в запросе. Что я должен делать?
Обновление:: Я использую CQ5.5. EMP - это свободный узел под контентом типа /content/EMP. Под этим (EMP) у меня есть неструктурированные узлы, которые содержат мои данные. И эти узлы имеют имена как 1,2, и т. Д.
2 ответа
Я попытался с моим экземпляром CQ5.4 найти решение. К сожалению, мои попытки не увенчались успехом. Когда я использовал ключевые слова "sql2 count" в Google, я нашел эту страницу. Там был задан тот же вопрос, и ответ был
В JCR SQL 1, XPath [2] или JCR-SQL2/AQM [3] нет счетчика (*) или группы по селектору.
Чтобы реализовать такое облако тегов, вы можете запустить один запрос, который выбирает весь ваш контент, содержащий соответствующее свойство "tag":
// element (*, my: Article) [@ tag]
а затем переберите результат и посчитайте ваши теги на стороне приложения, посмотрев на значения свойств тега и используя некоторую хэш-карту (tagid -> count).
http://www.day.com/specs/jcr/1.0/ (раздел 8.5)
http://www.day.com/specs/jcr/1.0/ (раздел 6.6)
Я думаю, что вы можете подключить этот ответ к MAX() и MIN().
Я реализовал простой сервлет Apache Sling для реализации функции count(*). Подробнее здесь: https://github.com/artika4biz/sling-utils . Официальную документацию можно найти здесь: https://jackrabbit.apache.org/oak/docs/query/query-engine.html .