Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Neo4j Cypher:一次调用中的多个独立查询_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher:一次调用中的多个独立查询

Neo4j Cypher:一次调用中的多个独立查询,neo4j,cypher,Neo4j,Cypher,在我的Neo4j 2.0服务器数据库中,我有一个林,即一组树。我的一个用例是获取任意树节点子集的子节点 例如,我有根节点 root1 root2 root3 root4 现在我想要root1和root4的子节点。我需要知道哪个孩子属于哪个根。每个查询都是一个简单的匹配密码查询。但出于性能考虑,我希望保持较低的数据库调用量,因为我使用的是Neo4j服务器。因此,我正在考虑一种方法来告诉Cypher“给我root1和root4的子项,并告诉我结果中哪个节点属于哪个根”。也就是说,我想到了一种地图。

在我的Neo4j 2.0服务器数据库中,我有一个林,即一组树。我的一个用例是获取任意树节点子集的子节点

例如,我有根节点

root1 root2 root3 root4
现在我想要
root1
root4
的子节点。我需要知道哪个孩子属于哪个根。每个查询都是一个简单的匹配密码查询。但出于性能考虑,我希望保持较低的数据库调用量,因为我使用的是Neo4j服务器。因此,我正在考虑一种方法来告诉Cypher“给我root1和root4的子项,并告诉我结果中哪个节点属于哪个根”。也就是说,我想到了一种地图。或者一组结果集,其中第一个元素是第一个根的子节点,第二个元素是第二个根的子节点,等等

有没有一种方法可以在Cypher中实现这一点,或者我必须在这里使用服务器插件

谢谢你,并致以最良好的问候

编辑:

澄清一下:我主要关心的是,我需要知道哪些孩子属于哪个根。作为一个例子,考虑这个命令生成的小图:

create (r1:ROOT {name:"root1"}),
(r2:ROOT {name:"root2"}),
(c11:CHILD {name:"child1_1"}),
(c12:CHILD {name:"child1_2"}),
(c13:CHILD {name:"child1_3"}),
(c21:CHILD {name:"child2_1"}),
(c22:CHILD {name:"child2_2"}),
(c23:CHILD {name:"child2_3"}),
(r1)-[:HAS_CHILD]->(c11),
(r1)-[:HAS_CHILD]->(c12),
(r1)-[:HAS_CHILD]->(c13),
(r2)-[:HAS_CHILD]->(c21),
(r2)-[:HAS_CHILD]->(c22),
(r2)-[:HAS_CHILD]->(c23)
在这里,我们得到了分别有三个子项的
root1
root2

要获取
root1
的子级,我将发出以下查询:

MATCH (r:ROOT)-[:HAS_CHILD]->c where r.name='root1' RETURN collect(c)
现在我知道了root
root1
的孩子们。 问题是:如果查询
root1
root2
的子级,结果将显示哪个子级属于哪个根的关联,那么查询会是什么样子。因为很明显,这个问题

MATCH (r:ROOT)-[:HAS_CHILD]->c where r.name='root1' OR r.name='root2' RETURN collect(c.id)

会给我两个根的孩子。但现在我不知道哪个根有哪个孩子。那么我能做些什么呢?

您应该给我们提供更多详细信息,但是像这样的查询(调整属性和关系)应该可以按照您的要求工作:

MATCH (child) <-[:HAS_CHILD]- (root:ROOT)
WHERE root.name IN ['root1','root4']
RETURN child, root

MATCH(child)这不应该是个问题,对单个树的查询是什么样子的?如果您按属性值查找单个根,您可能只需修改它,以按值集合查找多个根。是的,请提供更多详细信息,我们可以为您创建查询。非常感谢您的评论。请接受我的道歉,因为我没有详细的问题描述,我希望它现在更清楚。你是绝对正确的,我编辑了我的文章,希望现在有足够的信息。关于你提出的问题:现在我会有所有的孩子,但我不知道哪个孩子属于哪个根。我更新了我的答案,将孩子的根包含在return中。哦,我的,这很简单。非常感谢,我几乎觉得我不得不为这个明显软弱的问题道歉。最后,我可能会使用MATCH(r:ROOT)-[:HAS_CHILD]>c,其中r.name='root1'或r.name='root2'返回collect(c),r;因为我甚至让子节点按各自的根节点分组。再次感谢!