关于您的遍历的某些内容似乎不正确。对于初学者来说hasLabel()
,它看起来像是用不是标签的参数来调用的。我认为遍历应该是:
g.V().has('RiskLibrary', 'name', 'General Business').has('active', '1').as('lib').
select('lib').
outE('CONTAINS_RISK').
select('lib').
project('Risk Library', 'Risks').
by('name').
by(out('CONTAINS_RISK').
project('Name', 'Description', 'Impacts', 'Causes').
by('name').
by('description').
by(both('IMPACTS').
project('name').by('name').
fold()).
by(both('CAUSES').
project('name').by('name').
fold()).
fold())
如果这是正确的,那么我想知道遍历的目的究竟是什么。就目前而言,我希望它适用project('Risk Library', 'Risks')
于每一个outE('CONTAINS_RISK')
. 对于每个边缘,您将获得与您select('lib')
从中获取原始数据相同的输出Vertex
。project('Risk Library', 'Risks')
如果您不打算这样做,您可以想象一遍又一遍地执行大量的查询成本会很高。
假设您的其余遍历是正确的,我认为您只需要摆脱 的 步骤标签as('lib')
和 至 的行project('Risk Library', 'Risks')
,因此:
g.V().has('RiskLibrary', 'name', 'General Business').has('active', '1').
project('Risk Library', 'Risks').
by('name').
by(out('CONTAINS_RISK').
project('Name', 'Description', 'Impacts', 'Causes').
by('name').
by('description').
by(both('IMPACTS').
project('name').by('name').
fold()).
by(both('CAUSES').
project('name').by('name').
fold()).
fold())
也就是说,根据“CONTAINS_RISK”边的每个相对顶点存在多少“IMPACTS”和“CAUSES”边,这可能仍然是一个昂贵的遍历。