Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cypher查询Neo4j ForEach合并返回?_Neo4j_Cypher - Fatal编程技术网

Cypher查询Neo4j ForEach合并返回?

Cypher查询Neo4j ForEach合并返回?,neo4j,cypher,Neo4j,Cypher,因此,我试图发送一个将合并多个节点的查询,我希望该查询返回它创建的节点,但我不能将return语句放在FOREACH中,那么是否有方法收集节点,然后在最后返回该集合 FOREACH (tagName in {tags} | MERGE (n:items {classid:tagName.pClassid}) ON CREATE COLLECT(n) as allCreatedNodes) RETURN allCreatedNodes; "params" : { "tag

因此,我试图发送一个将合并多个节点的查询,我希望该查询返回它创建的节点,但我不能将return语句放在FOREACH中,那么是否有方法收集节点,然后在最后返回该集合

FOREACH (tagName in {tags} | 
MERGE (n:items {classid:tagName.pClassid}) 
ON CREATE 
COLLECT(n) as allCreatedNodes) 
RETURN allCreatedNodes;

"params" : {
        "tags": [{"pClassid" : 1}, {"pClassid" : 2}, {"pClassid" : 3}]
         }

不幸的是,现在这是不可能的

你能做的唯一一件事(如果你真的需要的话)是在事后查找节点。不幸的是,在中使用匹配还没有得到优化

FOREACH (tagName in {tags} |  MERGE (n:items {classid:tagName.pClassid}))
WITH [t IN {tags} | t.pClassid ] as classIds
MATCH (allCreatedNodes:items)
WHERE allCreatedNodes.classid IN classIds
RETURN allCreatedNodes;

您可以尝试的一件事是创建一个临时图形结构,以便在foreach之后快速查找节点。如果标记集合很小,这可能不值得,但有时这是一个有用的策略,在标签索引处理集合中的
样式查找之前,可能值得一试。基本上,这意味着维护一些小的graph结构作为临时(查询本地或查询类型本地)索引。在本例中

  • 通过创建(查询本地)或合并(查询类型本地)索引节点开始查询
  • 将所有合并的节点与之关联
  • 以及何时从索引节点返回匹配到创建的节点
  • 删除关系(如果查询是本地的,则删除索引节点)并返回
  • 我现在不能测试这个,但是你可以试试这样的

    CREATE (index)
    FOREACH (tagName in {tags} | 
        MERGE (n:items {classid:tagName.pClassid} )
        CREATE index-[:TRANSIENT]->n
    ) 
    WITH index
    MATCH index-[t:TRANSIENT]->n
    DELETE t, index
    RETURN n
    

    (对于您的查询类型来说,这可能有点过头了。如果您尝试了,请尝试分析查询,并与从标签索引重新获取和回发进行比较。)

    是,这似乎是一个可能的解决方案