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
相关产品推荐
相关产品推荐

