问题描述
我的图形架构如下所示:
(Location)<-[:INVENTOR_LOCATED_IN]-(Inventor)-[:INVENTOR_OF]->(Patent)
我正在尝试从查询路径中的每个步骤返回多个值。这是我到目前为止正确运行的查询:
g.V().and(has('Location','city',textContains('Bloomington')),has('Location','state',textContains('IN'))).as('a').
bothE().bothV().hasLabel('Inventor').as('b').
bothE().bothV().has('Patent','title',textContains('Lid')).as('c').
select('a,','b','c').
by('state').by('name_first').by('title').
fold();
我想做的是为每一步返回两个节点属性。我尝试了以下但它返回一个错误:
g.V().and(has('Location','c').
by('city','state').by('name_first','name_last').by('title','abstract').
fold();
任何人都可以建议允许我从路径中的每个节点返回多个属性的语法吗?
解决方法
by(key)
是 values(key)
的一种简写,这意味着如果您有多个值,您可以这样做:
g.V().and(has('Location','city',textContains('Bloomington')),has('Location','state',textContains('IN'))).as('a').
bothE().bothV().hasLabel('Inventor').as('b').
bothE().bothV().has('Patent','title',textContains('Lid')).as('c').
select('a,','b','c').
by(values('city','state').fold()).
by(values('name_first','name_last').fold()).
by(values('title','abstract').fold()).
fold()
您还可以考虑将 elementMap()
、valueMap()
或 project()
的形式作为替代方案。由于 by()
需要 Traversal
,因此您有很大的灵活性。