ForEach 在 Gremlin 上的步骤
ForEach step on Gremlin
我有一个像这样的 neo4j 查询:
...
"WITH DISTINCT k " +
// classic for each loop for the new rankings information
"FOREACH (app in $apps | " +
// upsert the app
" MERGE (a:App{appId:app.appId}) " +
...
// end of loop
") " +
我正在使用 gremlin-java。在这里,我想给 $apps
作为自定义参数。我刚刚检查了 gremlin 文档,但找不到 foreach 步骤。有什么建议吗?
graph.foreach(apps: map)...
解决方法:
...constant($apps).unfold().as(app)...
如您所述,您可以使用 constant
步骤将值注入查询。但是,您也可以使用 inject
步骤以类似方式插入值集合。这里有几个简单的示例 - 您可以根据需要扩展这些模式以包含 id、label 和多个 属性 值。
gremlin> g.inject([[id:1],[id:2],[id:3],[id:4]]).
unfold().as('a').
addV('test').
property('SpecialId',select('a').select('id'))
==>v[61367]
==>v[61369]
==>v[61371]
==>v[61373]
gremlin> g.V().hasLabel('test').valueMap(true)
==>[id:61367,label:test,SpecialId:[1]]
==>[id:61369,label:test,SpecialId:[2]]
==>[id:61371,label:test,SpecialId:[3]]
==>[id:61373,label:test,SpecialId:[4]]
gremlin> g.inject(1,2,3,4).as('a').
addV('test2').
property('SpecialId',select('a'))
==>v[61375]
==>v[61377]
==>v[61379]
==>v[61381]
gremlin> g.V().hasLabel('test2').valueMap(true)
==>[id:61375,label:test2,SpecialId:[1]]
==>[id:61377,label:test2,SpecialId:[2]]
==>[id:61379,label:test2,SpecialId:[3]]
==>[id:61381,label:test2,SpecialId:[4]]
gremlin>
第一个查询注入地图列表。第二个是一个简单的列表。这有点像您可能在 Cypher 中使用的 UNWIND
模式,它的工作方式类似。
我有一个像这样的 neo4j 查询:
...
"WITH DISTINCT k " +
// classic for each loop for the new rankings information
"FOREACH (app in $apps | " +
// upsert the app
" MERGE (a:App{appId:app.appId}) " +
...
// end of loop
") " +
我正在使用 gremlin-java。在这里,我想给 $apps
作为自定义参数。我刚刚检查了 gremlin 文档,但找不到 foreach 步骤。有什么建议吗?
graph.foreach(apps: map)...
解决方法:
...constant($apps).unfold().as(app)...
如您所述,您可以使用 constant
步骤将值注入查询。但是,您也可以使用 inject
步骤以类似方式插入值集合。这里有几个简单的示例 - 您可以根据需要扩展这些模式以包含 id、label 和多个 属性 值。
gremlin> g.inject([[id:1],[id:2],[id:3],[id:4]]).
unfold().as('a').
addV('test').
property('SpecialId',select('a').select('id'))
==>v[61367]
==>v[61369]
==>v[61371]
==>v[61373]
gremlin> g.V().hasLabel('test').valueMap(true)
==>[id:61367,label:test,SpecialId:[1]]
==>[id:61369,label:test,SpecialId:[2]]
==>[id:61371,label:test,SpecialId:[3]]
==>[id:61373,label:test,SpecialId:[4]]
gremlin> g.inject(1,2,3,4).as('a').
addV('test2').
property('SpecialId',select('a'))
==>v[61375]
==>v[61377]
==>v[61379]
==>v[61381]
gremlin> g.V().hasLabel('test2').valueMap(true)
==>[id:61375,label:test2,SpecialId:[1]]
==>[id:61377,label:test2,SpecialId:[2]]
==>[id:61379,label:test2,SpecialId:[3]]
==>[id:61381,label:test2,SpecialId:[4]]
gremlin>
第一个查询注入地图列表。第二个是一个简单的列表。这有点像您可能在 Cypher 中使用的 UNWIND
模式,它的工作方式类似。