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
是否可以使用 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