使用记录的属性作为索引获取列表项
Getting a list item using record's attribute as an index
如何使用属性之一作为列表的索引来访问列表中的项目?
这是测试架构:
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.
我有这个简单的结构:
为了检索您要查找的结果,我使用了这个 query:
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
----+------+------
希望对您有所帮助
似乎这是适用于多条记录的解决方案:
select items[$i].name from Test let $i = eval('selected')
注意:但是,如果属性可以直接用于索引引用嵌入式列表的查询中的元素,这仍然有意义。这可能在更高版本的 OrientDB 中可用
如何使用属性之一作为列表的索引来访问列表中的项目?
这是测试架构:
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.
我有这个简单的结构:
为了检索您要查找的结果,我使用了这个 query:
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
----+------+------
希望对您有所帮助
似乎这是适用于多条记录的解决方案:
select items[$i].name from Test let $i = eval('selected')
注意:但是,如果属性可以直接用于索引引用嵌入式列表的查询中的元素,这仍然有意义。这可能在更高版本的 OrientDB 中可用