Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OrientDB查询保持中间id的第二级关系_Orientdb - Fatal编程技术网

OrientDB查询保持中间id的第二级关系

OrientDB查询保持中间id的第二级关系,orientdb,Orientdb,我想在OrientDB图形数据库中查询一个顶点,以获得第二级顶点,并保留中间顶点id 这种关系将表现为: User <--edge--> User <--edge--> User (1) (2) (3) 从第二级查找顶点的查询如下所示:选择两个“边”。从10:2开始选择两个“边”。当然,如果输出用户之间存在相互关系,则可以使用set函数和其他条件对查询进行优化。对于这个输出,我想看到一个额外的字段属性/列,不管你想叫它什么

我想在OrientDB图形数据库中查询一个顶点,以获得第二级顶点,并保留中间顶点id

这种关系将表现为:

User <--edge--> User <--edge--> User
(1)             (2)             (3)
从第二级查找顶点的查询如下所示:选择两个“边”。从10:2开始选择两个“边”。当然,如果输出用户之间存在相互关系,则可以使用set函数和其他条件对查询进行优化。对于这个输出,我想看到一个额外的字段属性/列,不管你想叫它什么,在这里我可以看到这种关系的中间顶点

希望有人能在这方面帮助我,如果你需要更多的信息,或者如果你不了解一些事情,请告诉我。多谢各位

create class User extends V

create vertex User set name = 'user0'       (#12:0)
create vertex User set name = 'user1'       (#12:1)
create vertex User set name = 'user2'       (#12:2)
create vertex User set name = 'user3'       (#12:3)
create vertex User set name = 'user4'       (#12:4)


create class SomeEdge extends E

create edge SomeEdge from #12:0 to #12:1
create edge SomeEdge from #12:1 to #12:2
create edge SomeEdge from #12:4 to #12:3
create edge SomeEdge from #12:3 to #12:0
更新:

我发现应该怎么做,但它不起作用。我相信这是某种错误,报告了它,我现在正在等待答案

应该有效的查询如下所示:

select *,$id from (select both('edge') from (select from (select both('edge') from <rid>) let $id = @rid))
当然,查询可以优化为更少的子查询,但出于逻辑考虑,我这样说

查询的问题是,例如上面提到的,$id的所有值都是10:3,因为它是记录的最后一个值。LET子句不会将单个值指向每个记录,而是将最后一个值与我在示例中提到的所有记录相关联

也许我错了,这不是一个错误,如果有人知道一些关于它,希望你能帮助我。如果它是一个bug,我愿意接受解决这个问题的建议。多谢各位

create class User extends V

create vertex User set name = 'user0'       (#12:0)
create vertex User set name = 'user1'       (#12:1)
create vertex User set name = 'user2'       (#12:2)
create vertex User set name = 'user3'       (#12:3)
create vertex User set name = 'user4'       (#12:4)


create class SomeEdge extends E

create edge SomeEdge from #12:0 to #12:1
create edge SomeEdge from #12:1 to #12:2
create edge SomeEdge from #12:4 to #12:3
create edge SomeEdge from #12:3 to #12:0
在这种情况下,您需要12:2和12:4,但保留12:1和12:3中间产物。也许此查询将帮助您:

select @rid, both('SomeEdge') from (select expand(both('SomeEdge')) from #12:0 )

Y、 但是这个查询的问题是它不能扩展,因为投影不允许使用扩展和展平操作符。所以我的问题是,你将如何扩展第二个两者。或者更好,你会如何修复:从12:0开始选择@rid,expandtware'SomeEdge'也许你正在谈论。我试过了,但没有找到任何解决办法。谢谢你的回答。还有一件事:为什么我不应该放弃OrientDB而选择Neo4j?在我看来,orient仍然缺少一些功能,并且有一些bug。我认为这个问题没有正确的答案。见:
select @rid, both('SomeEdge') from (select expand(both('SomeEdge')) from #12:0 )