1

如何使用其中一个属性作为该列表的索引来访问列表中的项目?

这是测试架构:

create class Test extends V
insert into Test content {"items": [ { "name": "Item 1" }, { "name": "Item 2" } ], "selected": 1 }

假设新记录 RID 为 #100:0,则以下查询不起作用

select items[ @this.selected ].name from #100:0
select items[ eval('@this.selected') ].name from #100:0

我究竟做错了什么?我在东方 2.1.8。

4

2 回答 2

2

我有这个简单的结构:

在此处输入图像描述

为了检索您要查找的结果,我使用了以下查询

select items[$i.sel].name from Test
let $i = (select eval('selected') as sel from #12:0)

输出

----+------+------
#   |@CLASS|items
----+------+------
0   |null  |Item 1
1   |null  |Item 3
----+------+------

已编辑

或者这个

select items[$i.sel].name from Test
let $i = (select eval('selected') as sel from #12:1)

输出

----+------+------
#   |@CLASS|items
----+------+------
0   |null  |Item 2
1   |null  |Item 4
----+------+------

第二次编辑

查询 1

select items.name[$i.sel] from Test
let $i = (select *, eval('selected') as sel from 12:0)
where @this in $i

输出

----+------+------
#   |@CLASS|items
----+------+------
0   |null  |Item 1
----+------+------

查询 2

select items.name[$i.sel] from 12:1
let $i = (select eval('selected') as sel from 12:0)

输出

----+------+------
#   |@CLASS|items
----+------+------
0   |null  |Item 3
----+------+------

查询 3

select items[$i.selected].name from Test let $i = selected unwind items

输出

----+------+------
#   |@CLASS|items
----+------+------
0   |null  |Item 1
1   |null  |Item 2
2   |null  |Item 3
3   |null  |Item 4
----+------+------

希望能帮助到你

于 2016-02-09T10:09:32.290 回答
1

似乎这是适用于多条记录的解决方案:

select items[$i].name from Test let $i = eval('selected')

注意:但是,如果属性可以直接用于索引引用嵌入列表的查询中的元素,这仍然是有意义的。这可能在更高版本的 OrientDB 中可用

于 2016-02-09T14:14:07.843 回答