Gremlin Python:如何使用合并获取顶点(如果存在),否则插入

Gremlin Python: How to use coalesce to get vertex if exists, else insert

是否可以使用 Gremlin coalesce 步骤通过 id(或属性)select 顶点(如果存在这样的顶点),否则插入顶点?我尝试使用以下方法执行此操作,但出现 'list' object has no attribute 'coalesce' 错误,我认为这是由 .fold().next() 返回 python 列表对象引起的:

    my_vertex = g.V(1).fold().next().coalesce(__.unfold(), g.addV(
         'my_label'
        ).property(
            T.id,
            1
        ).property(
            'test', 'foo'
        ).property(
            'name', 'my_vertex_name'
        ).property(
            'created_timestamp', 1575480467
        ).next()
    )

这样做是否有任何性能优势,或者我应该简单地将其分解为初始顶点查询的 hasNext() 上的 if/else?

您需要从查询中删除 next。接下来是最后一步。如果没有 next ,查询应该按照您期望的方式工作,如果 V(1) 存在,它将不会创建它,否则它会创建。除此之外,这是执行更新插入查询的好方法。

如果您使用的是 Neptune,请记住 ID 是字符串,因此它将是 V('1')。

我能够通过将 next() 终端步骤移动到遍历末尾来完成 "get if exists, else insert",如下所示:

my_vertex = g.V(1).fold().next().coalesce(__.unfold(), g.addV(
         'my_label'
        ).property(
            T.id,
            1
        ).property(
            'test', 'foo'
        ).property(
            'name', 'my_vertex_name'
        ).property(
            'created_timestamp', 1575480467
        )
    ).next() //notice that .next was simply moved to the close of the .coalesce step