You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gremlin Python中如何实现边不存在则创建、存在则更新属性?

Gremlin Python 边Upsert(不存在创建、存在更新)解决方案

你原有代码的问题是仅在新建边的分支里定义了属性写入逻辑,匹配到已有边时没有对应的属性更新操作,所以不会触发旧边的属性修改。
你只需要把属性更新的逻辑从coalesce的新建分支提取到coalesce之后即可,coalesce最终总会返回目标边(要么是匹配到的旧边,要么是新创建的边),后续的属性操作会统一作用在这条边上。

修改后代码如下:

from gremlin_python.process.graph_traversal import __
from gremlin_python.process.traversal import Cardinality

g.V().
  hasLabel('person').as_('p').
  V().
  hasLabel('house').as_('h').
  coalesce(
    # 匹配person到当前house已有的owns边
    __.inE('owns').where(__.outV().as_('p')),
    # 没有匹配到则新建边
    __.addE('owns').from_('p').to('h')
  ).
  # 统一更新属性,新旧边都会执行这一步
  property(Cardinality.set_, 'duration', 2).
  iterate()

补充说明:

  • 如果你要的是直接覆盖duration属性的值,而不是往set集合里追加值,可以去掉Cardinality.set_参数,直接写property('duration', 2)即可。
  • 上面的逻辑默认你要匹配的是当前person到当前house的owns边,如果存在多条符合条件的边,所有匹配到的边都会被更新属性。

内容的提问来源于stack exchange,提问作者bandzbond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:27:02