【问题标题】:Gremlin Java query to merge two nodesGremlin Java 查询以合并两个节点
【发布时间】:2020-02-28 12:11:50
【问题描述】:

假设我有两个节点 - A 和 B。

我正在尝试使用 gremlin - Java 将这两个节点合并到一个图中。 能够使用这个 SO 答案生成查询 - https://stackoverflow.com/a/46435070

g.V(parentNode).union(identity(), janusClient.g.V(aliasNode))
  .unfold()
  .sideEffect(properties().group("p").by(T.key).by(value()))
  .sideEffect(__.outE().group("o").by(T.label).by(__.project("p","iv").by(__.valueMap()).by(__.inV()).fold()))
  .sideEffect(__.inE().group("i").by(T.label).by(__.project("p","ov").by(__.valueMap()).by(__.outV()).fold()))
  .sideEffect(__.drop())
  .cap("p","o","i").as("poi")
  .addV().as("u")
  .sideEffect(
      __.select("poi").select("p").unfold().as("kv")
        .select("u").property(__.select("kv").select(Column.keys), __.select("kv").select(Column.values)))
  .sideEffect(
      __.select("poi").select("o").unfold().as("x").select(Column.values)
        .unfold().addE(__.select("x").select(Column.keys)).from(__.select("u")).to(__.select("iv")))
  .sideEffect(
      __.select("poi").select("i").unfold().as("x").select(Column.values)
        .unfold().addE(__.select("x").select(Column.keys)).from(__.select("ov")).to(__.select("u"))).iterate();

问题在于最后一个副作用步骤中的这一行.addE(__.select("x").select(Column.keys))。这不会编译,因为.addE 需要Traversal 类型的参数,而__.select("x").select(Column.keys) 返回GraphTraversal 类型的结果。

替换为String.valueOf(.addE(__.select("x").select(Column.keys))) 不会产生预期的结果。

任何帮助表示赞赏!

【问题讨论】:

    标签: gremlin janusgraph


    【解决方案1】:

    我认为您可能只是遇到了泛型问题? addE(Traversal<?, String>) 是在 3.3.1 中添加的,但您试图给它一个 GraphTraversal<S, Collection<E2>> 其中 E2 在这种情况下我应该是 String。您应该能够通过一些类型擦除来解决它 - 只需转换为 Traversal:

    addE((Traversal) __.select("x").select(Column.keys))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多