Gremlin 查询属性,如果不存在则自动创建包含该属性的顶点

问题描述 投票:0回答:1

我想创建一个查询,从值列表中查找包含属性值的顶点,并创建一个具有该属性的新顶点。

例子:

输入:名称列表,如“Frank”、“Sam”、“Peter” 查询:搜索名称属性设置为上述名称之一的人员节点,如果不存在,则创建人员节点并添加缺少名称的属性。

名称属性为“Sam”的节点在查询之前存在 查询后存在三个节点,一个具有名称属性“Frank”,一个具有名称“Sam”(未更改),一个具有名称属性“Peter”。

gremlin 新手感谢帮助 ;-)

我可能会使用 inject() 作为列表并使用 coalesce 来创建节点,但我不知道如何将我正在迭代的名称添加到新创建的顶点中的属性。

gremlin tinkerpop
1个回答
2
投票

使用 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.

的支持
© www.soinside.com 2019 - 2024. All rights reserved.