【问题标题】:Can we use apache Gremlin DSL for mutations (CREATE, UPDATE & DELETE)?我们可以使用 apache Gremlin DSL 进行突变(创建、更新和删除)吗?
【发布时间】:2023-01-15 04:07:08
【问题描述】:

我们可以使用 apache Gremlin 域特定语言 (DSL) 进行突变(创建、更新和删除)吗?

Gremlin Java DSL

@GremlinDsl(traversalSource = "com.sample.dsl.EmpTraversalSourceDsl")
public interface EmpTraversalDsl<S, E> extends GraphTraversal.Admin<S, E> {
    
    public default Vertex create(Employee employee) {
        return addV("employee");
    }

}

每次,当我调用此方法时,它都会创建数据库中现有内容的两倍。

前任:

如果有,2 员工然后它变成 4。4 变成 8 等等......

【问题讨论】:

  • 听起来您的代码相当于 g.V().addV() 而不是 g.addV()
  • 正确的。 coalesce(__.V().hasId(id), __.addV("employee").property("O", "K")); 工作正常。关于在 dsl 中没有 coalesce 时如何做的任何想法?
  • 如果您尝试进行条件写入或更新插入,则需要遵循以下模式:kelvinlawrence.net/book/Gremlin-Graph-Guide.html#upsert
  • 只想使用addV(),没有任何条件。我想,在DSL 中,默认情况下它以g.V() 开头。这就是为什么,它复制了@KelvinLawrence 提到的插入
  • 您是否能够共享更多代码,尤其是在您使用 DSL 的地方?

标签: gremlin tinkerpop tinkerpop3 gremlin-java


【解决方案1】:

问题是我尝试使用 EmpTraversalSourceDsl 创建顶点,所以查询最终看起来像

g.V().hasLabel('employee').addV('employee').property(T.id, 'T12321321R'))

使用coalesce解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 2011-03-08
    • 2017-07-05
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多