【问题标题】:How, with Gremlin, to return properties from in-vertices the same as I do from out-vertices? (Not as arrays)如何使用 Gremlin 从内顶点返回属性,就像我从外顶点返回一样? (不是数组)
【发布时间】:2019-07-03 13:55:47
【问题描述】:

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

我找到了一种解决方法,但它并不理想,因为它将所需的属性值作为长度为 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 数据库实例)

【问题讨论】:

  • 另外,奇怪的是,在末尾添加 .limit(n) ,其中 n

标签: gremlin amazon-neptune


【解决方案1】:

在我看来,从上面的错误和您的解决方法来看,并非所有的“测试中心”都具有“主机”类型的优势。当使用project 时,by 必须映射一个有效值。

你可以做两件事:

1) 确保将在project 中返回一个值:

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')))

【讨论】:

  • 建议 1 不是问题,因为代码始终存在(我已经尝试过,以防万一只是为了得到同样的旧错误),但建议 2 似乎有效!谢谢!!
  • 另外,知道为什么这会与 where 过滤器一起工作,而不是我最初尝试的方式吗?
  • 正如我所写,我认为您的“TestCenter”没有来自“hosts”类型的优势。尝试运行 g.V().hasLabel('TestCenter').not(__.in('hosts')) 来确认这一点。
  • 你是对的!我没有意识到这一点(而且不应该是这样),当我最初尝试您的第一个建议时,我遇到了一个错误,但我一定犯了一个错误。再次感谢。我希望我有声望支持你的回答。
猜你喜欢
  • 2020-09-14
  • 1970-01-01
  • 2018-03-22
  • 2022-01-22
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
相关资源
最近更新 更多