Запросы к нескольким элементам LINKMAP с помощью OrientDB SQL

У меня есть класс, который содержит поле LINKMAP, называемое ссылками. Этот класс рекурсивно используется для создания произвольных иерархических группировок (что-то вроде примера временных рядов, но без фиксированной структуры год/месяц/день).

Такой запрос:

select expand(links['2017'].links['07'].links['15'].links['10'].links) from data where key='AAA'

Возвращает фактические записи, содержащиеся в последнем слое «ссылок». Это работает именно так, как ожидалось.

Но такой запрос (обратите внимание на 10,11 во втором и последнем слое «ссылок»):

select expand(links['2017'].links['07'].links['15'].links['10','11'].links) from data where key='AAA'

Вместо этого возвращает две строки последнего слоя «ссылок»:

{"1000":"#23:0","1001":"#24:0","1002":"#23:1"} {"1003":"#24:1","1004":"#23:2"}

Использование unionAll или intersect (с UNWIND или без него) приводит к этой единственной записи:

[{"1000":"#23:0","1001":"#24:0","1002":"#23:1"},{"1003":"#24:1","1004":"#23:2"}]

Но ничто из того, что я пробовал (включая различные попытки «составных» SELECT), не заставит расширение работать так же, как в исходном примере (т.е. вернуть фактические записи, представленные в последнем LINKMAP).

Есть ли синтаксис SQL, который позволит это сделать?

Примечание. Даже этот (слегка измененный) пример из документов ODB не приводит к списку связанных записей:

select expand(records) from
(select unionAll(years['2017'].links['07'].links['15'].links['10'].links, years['2017'].links['07'].links['15'].links['11'].links) as records from data where key='AAA')

Ссылка: https://orientdb.com/docs/2.2/Time-series-use-case.html


person eric    schedule 14.11.2017    source источник


Ответы (1)


Я не уверен, чего вы хотите достичь, но я думаю, что стоит попробовать с values():

 select expand(links['2017'].links['07'].links['15'].links['10','11'].links.values()) from data where key='AAA'
person Luigi Dell'Aquila    schedule 16.11.2017
comment
Никакого удовольствия от values(), он возвращает пустой набор результатов. Чего я пытаюсь добиться, так это вернуть связанные записи. Когда я запрашиваю с помощью .links['10'], это работает, как и ожидалось, но если я использую любую вариацию нескольких записей в карте ссылок (например, .links['10','11'] или структуру unionAll из примера документации ), я получаю сами карты ссылок, а не связанные записи. - person eric; 16.11.2017
comment
Я думаю, что хитрость заключается в том, чтобы выяснить, как включить это (отдельные карты ссылок): {1000:#23:0,1001:#24:0,1002:#23:1} {1003:#24:1,1004:# 23:2} или [{1000:#23:0,1001:#24:0,1002:#23:1},{1003:#24:1,1004:#23:2}] в это (один объединенная карта ссылок): {1000:#23:0,1001:#24:0,1002:#23:1, 1003:#24:1,1004:#23:2} - person eric; 16.11.2017
comment
Покопавшись еще немного, я нашел синтаксис, который работает, но он очень многословен (надеюсь, есть более простой/короткий способ): select expand(unionAll(links['2017'].links['07'].links[' 15'].ссылки['10'].ссылки.значения(), ссылки['2017'].ссылки['07'].ссылки['15'].ссылки['11'].ссылки.значения() )) - person eric; 17.11.2017