使用OrientDB SQL

时间:2017-11-14 18:36:38

标签: orientdb orientdb2.2

我有一个包含名为links的LINKMAP字段的类。递归地使用此类来创建任意层次分组(类似于时间序列示例,但不是固定的年/月/日结构)。

像这样的查询:

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

返回"链接"的最后一层中包含的实际记录。这完全符合预期。

但是像这样的查询(请注意&#34的第二层到第二层的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"&#34 ; 1002":"#23:1"},{" 1003":"#24:1"" 1004&#34 ;: "#23:2"}]

但我没有尝试过(包括对#34;复合" SELECTs的各种尝试)将使扩展工作与原始示例一样(即返回上一个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

1 个答案:

答案 0 :(得分:0)

我不确定你想要达到什么目标,但我认为值得尝试使用values()

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