我不确定标题是说出它的最佳方式,这是结构:
如果你想导入它以测试它,那么这是db json备份:http://pastebin.com/iw2d3uuy
我想让生活在大陆1的人类吃掉菜肴,直到_Parent Human搬到大陆2。 这意味着目标是Dish 1& 2。
如果父母移居到另一个大陆,即使他们搬回大陆1,我也不想要他们的菜肴和他们孩子的菜肴。 我不知道这是否重要,但一个人可以有多个孩子。
如果没有关于移出欧洲大陆的人类子女的条件,这个查询就会有效:
SELECT expand(in('_Is_in').in('_Lives').in('_Eaten_by'))
FROM Continent WHERE continent_id = 1
但我猜这里我们被迫使用(除其他外)
TRAVERSE out('_Parent') FROM Human WHILE
我尝试使用带有子查询的遍历的while来获取我感兴趣的所有人类,然后尝试获取Dishes,但我甚至不确定我们可以使用子查询。
我希望该结构能够帮助其他用户快速找出这个查询是否对他们有用。如果有人想知道,我使用OrientDB Studio的Graph选项卡和GIMP一起制作它。
作为奖励,如果有人知道Gremlin语法,那么学习它也会很有用。
请随意编辑您认为合适的帖子并提出您的想法:)
答案 0 :(得分:0)
SELECT expand(in('_Eaten_by'))
FROM (TRAVERSE out('_Parent')
FROM (SELECT from Human WHERE in('_Parent').size() = 0)
WHILE out('_Lives').out('_Is_in').continent_id = 1)
说明:
TRAVERSE out('_Parent')
FROM (SELECT FROM Human WHERE in('_Parent').size() = 0)
WHILE out('_Lives').out('_Is_in').continent_id = 1
返回人类1和2.
该查询遍历Human,从Human 1开始,而Human连接到Continent 1。
它从in('_Parent').size() = 0
开始,它们是没有任何_Parent的人类(在这种情况下只有人类1)(size()是来自_Parent的顶点集合的大小。)
SELECT expand(in('_Eaten_by')) FROM
得到菜肴,从我们从遍历中获得的人类开始并经过边缘_Eaten_by。
注意:请务必始终在顶点和边名称周围使用',否则似乎不会考虑名称。