如果边缘属性已经存在,如何更新它?

How to update an edge properties if it already exists?

我正在编写一个 gremlin python 查询,目的是

  1. 如果边不存在则创建边
  2. 如果有则更新边缘属性

我已经在这里阅读了一些答案,并使用 coalesce 弄清楚了第一部分,但我不确定如何更新边缘(如果存在)。我想这会发生在合并的第一部分,但我尝试了 select edge 但没有用

这是我目前的情况

  g.V().
  hasLabel('person').as_('p').
  V().
  hasLabel('house').as_('h').
  coalesce(
    __.inE('owns').where(__.outV().as_('p')),
    __.addE('owns').from_('p').to('h').
    property(Cardinality.set_, 'duration', 2)).
  iterate()

在编写查询之前,您需要更正您对 Edge 属性 基数的假设。根据您的查询,您似乎想要使用 Set cardinality 更新边的 属性。

Tinkerpop does not support Set cardinality on Edge properties.

TLDR 答案:

g.V().
  hasLabel('house').as('p').
  inE('owns').
  where(outV().hasLabel('person')).
  fold().
  coalesce(
    unfold().property('duration', 2),
    addE('owns').from(V().hasLabel('person')).to(V().hasLabel('house')))

以上查询基于数据库中只有 2 个顶点的假设,第一个带有标签 'house',第二个带有标签 'person'

如果以上信息不正确,那么您需要更新顶点过滤器以将它们指向单个顶点(除非您计划添加质量边)。