如何在Gremlin上更新几个顶点属性?

时间:2011-10-06 16:37:16

标签: neo4j graph-databases

我想在顶点上添加几个属性。我能做到:

g.v(1).firstname='Marko'
g.v(1).lastname='Rodriguez'

但是如何在单个查询中使用以下哈希{firstname:'Marko',lastname:'Rodriguez'}添加这些属性?

1 个答案:

答案 0 :(得分:5)

您可以构建一个可行的SideEffect管道。在简单的情况下,请执行以下操作:

g.v(1)._().sideEffect{it.firstname='Marko'; it.lastname='Rodriguez'}

或者,如果您只需要处理一个节点并拥有地图,则可以使用地图的each方法:

m = [firstname:'Marko', lastname:'Rodriguez']
m.each{g.v(1).setProperty(it.key, it.value)}

或者你可以在你想要设置值的哈希管道内执行此操作。再一次,我们将使用sideEffect管道。因为闭包内部有一个闭包,我们需要将it的值从第一个闭包别名变为别的,在本例中为tn,“this node”的缩写,因此可以在第二个关闭。:

g = new TinkerGraph()
g.addVertex()
g.addVertex()
m = ['0': [firstname: 'Marko', lastname: 'Rodriguez'], '1': [firstname: 'William', lastname: 'Clinton']]
g.V.sideEffect{tn = it; m[tn.id].each{tn.setProperty(it.key, it.value)}}

这将产生以下结果:

gremlin> g.v(0).map
==>lastname=Rodriguez
==>firstname=Marko
gremlin> g.v(1).map
==>lastname=Clinton
==>firstname=William

这种方法的一个潜在问题是你需要记住顶点id是字符串而不是整数,所以一定要引用它们。