【问题标题】:ForEach step on Gremlin在 Gremlin 上的 ForEach 步骤
【发布时间】:2021-02-16 16:42:03
【问题描述】:

我有一个 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)...

【问题讨论】:

    标签: java gremlin tinkerpop3


    【解决方案1】:

    如您所述,您可以使用constant 步骤将值注入查询。但是,您也可以使用inject 步骤以类似方式插入值集合。以下是几个简单的示例 - 您可以根据需要扩展这些模式以包含 id、标签和多个属性值。

    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 模式,并且它的工作方式类似。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多