我想创建一个查询,从值列表中查找包含属性值的顶点,并创建一个具有该属性的新顶点。
例子:
输入:名称列表,如“Frank”、“Sam”、“Peter” 查询:搜索名称属性设置为上述名称之一的人员节点,如果不存在,则创建人员节点并添加缺少名称的属性。
名称属性为“Sam”的节点在查询之前存在 查询后存在三个节点,一个具有名称属性“Frank”,一个具有名称“Sam”(未更改),一个具有名称属性“Peter”。
gremlin 新手感谢帮助 ;-)
我可能会使用 inject() 作为列表并使用 coalesce 来创建节点,但我不知道如何将我正在迭代的名称添加到新创建的顶点中的属性。
使用 TinkerGraph 和 Gremlin 控制台,我们可以创建一个包含“Sam”节点的简单图形
gremlin> g=TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('Person').property('name','Sam')
==>v[32]
然后我们可以编写一个查询,利用新的
mergeV
步骤来添加失踪人员。
gremlin> g.inject([(T.label):'Person','name':'Sam'],
......1> [(T.label):'Person','name':'Peter'],
......2> [(T.label):'Person','name':'Frank']).
......3> mergeV()
==>v[32]
==>v[34]
==>v[36]
我们可以检查一下图中现在每个人都存在:
gremlin> g.V().valueMap(true)
==>[id:32,label:Person,name:[Sam]]
==>[id:34,label:Person,name:[Peter]]
==>[id:36,label:Person,name:[Frank]]
在 TinkerPop 3.6.x 发布之前,这样做需要使用
inject
和 coalesce
的更复杂的查询。 mergeV
的使用方式有很多种,TinkerPop 文档中有几个示例。
要将上述查询与 Amazon Neptune 结合使用,Neptune 引擎版本需要至少为 1.2.1.0。该引擎包含对 TinkerPop 3.6.x.
的支持