gremlin - 如何使用 Gremlin 从内顶点返回属性,就像从外顶点返回属性一样? (不是数组)

标签 gremlin amazon-neptune

我试图从一组标记的顶点开始遍历,然后将它们的所有内顶点通过特定类型的边连接起来,然后从那里将这些内顶点的属性作为对象返回。我可以对从同一组标记顶点开始的一些出顶点执行相同的操作,没有问题,但是当我尝试对某些内顶点执行此操作时,会出现“提供的遍历器未映射到值:”错误。

我找到了一种解决方法,但它并不理想,因为它以长度为 1 的数组形式返回所需的属性值。

以下是我如何使用出顶点成功完成非常相似的任务: g.V().hasLabel('TestCenter').project('address').by(out('physical').project('street').by(values('street1')))

这会返回类似的内容

==>{address={street=561 PLACE DE CEDARE}}
==>{address={street=370 N BLACK STATION AVE}}

这太棒了!

然后我尝试使用一些内顶点进行相同类型的查询,如下所示: g.V().hasLabel('TestCenter').project('host').by(__.in('hosts').project('aCode').by(values('code'))) 并得到上述错误。

我找到的解决方法是将 .fold() 添加到最后的“by”,如下所示: g.V().hasLabel('TestCenter').project('host').by(__.in('hosts').project('aCode').by(values('code')).fold ()) 但我的回答是这样的

==>{host=[{aCode=7387}]}
==>{host=[{aCode=9160}]}

我想要的是这样的回复:

==>{host={aCode=4325}}
==>{host={aCode=1234}}

(注意:我不确定这是否相关,但我正在将 Gremlin 连接到 Neptune 数据库实例)

最佳答案

在我看来,从上面的错误和您的解决方法来看,并非所有“TestCenter”都具有来自“hosts”类型的边缘。使用 project 时,by 必须映射为有效值。

你可以做两件事:

1) 确保项目中返回一个值:

g.V().hasLabel('TestCenter').project('host')
     .by(coalesce(__.in('hosts').project('aCode').by(values('code')), constant('empty')))

2)过滤器执行值:

g.V().hasLabel('TestCenter').where(__.in('hosts'))
.project('host').by(__.in('hosts').project('aCode').by(values('code')))

关于gremlin - 如何使用 Gremlin 从内顶点返回属性,就像从外顶点返回属性一样? (不是数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871763/

相关文章:

networkx - 海王星-Gremlin-Python |扩展网络分析和服务用例(如实时推荐)的最佳实践

javascript - Janusgraph 很难理解如何操作 gremlin 查询中的数据

groovy - 使用 Groovy 通过 Gremlin 读取 GraphML 文件的正确方法

graph-databases - 如何在一次查询中遍历回 gremlin 中的根顶点

amazon-web-services - 如何为通过 CSV 导入 AWS Neptune 的 Vertex 属性安排单一基数?

python - 获取边的开始节​​点和结束节点 id,没有 map step() gremline for neptune

java - 使用 Gremlin 和 Java 连接 JanusGraph 出现序列化异常(遇到未注册的类 ID : 65536)

gremlin - AWS 海王星 : Query Timeout Value

python - Gremlin Python - "Server disconnected - please try to reconnect"错误

elasticsearch - 在 Elasticsearch 查询中获取路径下的嵌套对象不是嵌套类型