当前位置: 首页 > 知识库问答 >
问题:

在coalesce()步骤中使用select()进行gremlin查询

殷功
2023-03-14

我正在尝试使用. as()在coalesce()中的第二个遍历中访问之前保存的遍历,如下所示:

查询更新边缘(如果存在/创建,则更新边缘)

Java代码:

g.V('x').as('start')
 .V('y').as('stop')
.inE('label').where(outV().as('edge'))
.select('start','stop','edge').fold()
.coalesce(unfold(),
        addE('label').from(select('start')).to(select('stop')))
.property('key','value')
.promise(Traversal::Next);

抛出如下错误:(为了简洁而精确)

gremlin.driver.exception。ResponseException:提供的遍历器未映射到值[停止]

当我将最后一个步骤替换为下面的工作状态时(而不是别名再次查询顶点)

替换为addE('tag'). from(选择('start')). to(选择('Stop'))

带addE('label')。从(V('x')。到(V('y'))

在合并中的第二次遍历中是否有别名引用?

注意:我正在收集所有与在合并之前查找边相关的数据,以便在创建边时丢失任何顶点时产生小精灵抛出错误

预期行为:事务成功时为True,创建边时缺少任何顶点时出错。

这在不使用as()别名的情况下按预期工作。但是,我正在尝试as()。我做不到。

希望这是清楚的。如果需要更多信息,请发表评论。谢谢

共有1个答案

宋斌
2023-03-14

无法选择标签“start”和“stop”的原因是在定义标签后使用了fold()fold()是一个减少障碍的步骤,它会导致在它之前定义的所有标签丢失。

在解释解决方案之前,这里是添加两个测试顶点的遍历。

g.addV().property(id, 'x').
  addV().property(id, 'y')

如果缺少任何顶点“x”或“y”,则以下遍历将返回字符串“error”。如果两个顶点都存在,则会向上插入边(如果存在,则更新边;如果不存在,则添加边)。

g.inject(1).
  optional(V('x').as('start')).
  choose(
    select('start'),
    optional(V('y').as('stop')).
    choose(
      select('stop'),
      coalesce(
        select('start').outE('label').as('e').inV().where(eq('stop')).select('e'),
        addE('label').from('start').to('stop')).
        property('key', 'value'),
      constant('error')),
    constant('error'))
 类似资料:
  • 问题内容: 我有一组一对一的映射A->苹果,B->香蕉,等等。我的表中有一列的值为A,B,C。 现在,我正在尝试使用选择语句,这将给我直接结果 但是我没有得到正确的结果,请帮助我。 问题答案: 这只是case语句的语法,看起来像这样。 提醒一下;不执行赋值,该值成为列内容。(如果您想将其分配给变量,则可以将其放在CASE语句之前)。

  • 问题内容: 我可以简化python中的for循环,例如: 但是,我不知道如何制作更复杂的代码,这在c ++中确实很容易。 您将如何在python中实现这样的for循环: 我到目前为止最接近的是: 问题答案: 首先,最重要的是:Python循环与C循环实际上并不是同一回事。它们改为For Each循环 。您迭代一个可迭代的元素。生成一个可迭代的整数序列,让您模拟最常见的C循环用例。 然而,大多数的时

  • 我们希望使用。NET C#。这样做的最好方法是什么? 我们知道BulkExecutor库只支持批量导入和批量更新操作。批量查询/读取操作是否也有类似的情况? 目前,我正在使用一个小精灵。Net.Driver,GremlinClient(< code > https://docs . Microsoft . com/en-us/azure/cosmos-db/create-graph-dot net

  • 为什么这个工会成员? 在Blaze persistence API中是否可以在没有联合的情况下获取查询?

  • 问题内容: 我有这个 Dockerfile : 和这个 Jenkinsfile : 这将导致以下错误: 我尝试使用,但没有成功。 我在docker jenkinsfile声明上使用args 时有些运气,但这会创建root拥有的目录和文件,这些文件和目录不能由用户Jenkins在下次运行时删除。 我不想在Dockerfile上进行操作,因为实际上Install步骤正在运行一个make文件,而不是我想

  • 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口权限。 步骤二:引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js 如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://r