Gremlin技术问询:查找指定属性顶点并自动创建缺失顶点
Gremlin批量查找/创建顶点实现
核心查询代码(两种写法)
写法1:使用identity()引用当前值
g.inject("Frank", "Sam", "Peter") .unfold() .coalesce( __.V().hasLabel("person").has("name", __.identity()), __.addV("person").property("name", __.identity()) )
写法2:使用as()+select()标记引用(可读性更强)
g.inject("Frank", "Sam", "Peter") .unfold() .as("targetName") .coalesce( __.V().hasLabel("person").has("name", select("targetName")), __.addV("person").property("name", select("targetName")) )
代码拆解说明
inject("Frank", "Sam", "Peter"):将目标姓名列表注入到Gremlin遍历流,作为处理的起始数据unfold():把注入的列表拆分成单个元素的遍历流,确保每个姓名都会被独立处理coalesce(...):Gremlin的短路逻辑遍历,会依次执行内部的两个步骤,优先返回第一个成功执行的结果:- 第一步:尝试查找
label为person、name属性匹配当前遍历姓名的顶点 - 第二步:如果第一步未找到匹配顶点,则创建一个新的
person顶点,并将当前遍历的姓名赋值给name属性
- 第一步:尝试查找
效果验证
初始存在name为"Sam"的person顶点时,执行上述查询后:
- 不会重复创建"Sam"的顶点
- 会自动创建"Frank"和"Peter"对应的
person顶点 - 最终会存在三个分别对应三个姓名的
person顶点,完全符合需求
内容的提问来源于stack exchange,提问作者Kiwifranky
相关产品推荐
相关产品推荐

