关于您的遍历的某些内容似乎不正确。对于初学者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())
如果这是正确的,那么我想知道遍历的目的究竟是什么。就目前的情况而言,我希望每个outE('CONTAINS_RISK') 都能达到project('Risk Library', 'Risks')。您将获得与 select('lib') 相同的每个边的输出,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”边,这可能仍然是一个昂贵的遍历。