Cypher查询Neo4j ForEach合并返回?
因此,我试图发送一个将合并多个节点的查询,我希望该查询返回它创建的节点,但我不能将return语句放在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
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
(对于您的查询类型来说,这可能有点过头了。如果您尝试了,请尝试分析查询,并与从标签索引重新获取和回发进行比较。)是,这似乎是一个可能的解决方案