【问题标题】:How do you use the clone feature in gremlin javascript?您如何使用 gremlin javascript 中的克隆功能?
【发布时间】:2019-09-19 23:29:25
【问题描述】:

尝试保存和重用查询-clone();

我已经尝试过query.clone()clone(query)statics.clone(query)graphPredicate.clone(query)

参考:http://tinkerpop.apache.org/docs/current/recipes/#traversal-component-reuse


const { Graph } = gremlin.structure;
const { P: graphPredicate, statics } = gremlin.process;
const { _ } = gremlin.process.statics;

  const g = graph.traversal().withRemote(gremlinConnection);


const query = statics.hasLabel(‘Movie’).hasId(gt(‘C’))

const count = g.V().flatMap(query.clone()).count().next()```

`Exception: TypeError: Cannot read property 'clone' of undefined`

【问题讨论】:

  • 你可以只声明查询吗?例如 const 查询。
  • 用 gremlin.process.static 别名替换静态变量。也不确定是否应该使用大括号。试试看。
  • @elanochecer 我们尝试了这两件事。在这一点上,我们认为问题出在匿名查询上。你以前用 JS 做过吗?

标签: javascript gremlin


【解决方案1】:

javascript 中没有clone()。但是您可以轻松创建一个:

function clone(traversal) {
  return new gremlin.process.GraphTraversal(
    traversal.graph,
    traversal.traversalStrategies,
    new gremlin.process.Bytecode(traversal.bytecode)
  )
}

您也可以将其添加到遍历本身:http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript-dsl

class MyTraversal extends gremlin.process.GraphTraversal {
  constructor(graph, traversalStrategies, bytecode) {
    super(graph, traversalStrategies, bytecode)
  }

  clone() {
    return new MyTraversal(
      this.graph,
      this.traversalStrategies,
      new gremlin.process.Bytecode(this.bytecode)
    )
  }
}

class MyTraversalSource extends gremlin.process.GraphTraversalSource {
  constructor(graph, strategies, bytecode) {
    super(graph, strategies, bytecode, MyTraversalSource, MyTraversal)
  }
}

const g = traversal(MyTraversalSource).withRemote(dc)

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2023-02-12
    相关资源
    最近更新 更多