Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/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
Neo4j Cypher:图a节点';s连接3深_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher:图a节点';s连接3深

Neo4j Cypher:图a节点';s连接3深,neo4j,cypher,Neo4j,Cypher,给定一个节点,我想用D3来绘制它,它的邻域深度是3 我能想出的最佳策略是: Query1: MATCH (n)-[r]-(m) WHERE id(n) IN [501] RETURN n, r, m 然后从结果中,在我的应用程序中,收集所有m的id,将这些新id放入in子句中(删除我已经完成的id),然后重复查询 Query2: MATCH (n)-[r]-(m) WHERE id(n) IN [502,511,1111] RETURN n, r, m Query3: MATCH (n)

给定一个节点,我想用D3来绘制它,它的邻域深度是3

我能想出的最佳策略是:

Query1:  MATCH (n)-[r]-(m) WHERE id(n) IN [501] RETURN n, r, m
然后从结果中,在我的应用程序中,收集所有m的id,将这些新id放入in子句中(删除我已经完成的id),然后重复查询

Query2:  MATCH (n)-[r]-(m) WHERE id(n) IN [502,511,1111] RETURN n, r, m
Query3:  MATCH (n)-[r]-(m) WHERE id(n) IN [512,519,1116,1130] RETURN n, r, m
注意:直到第一次查询之后,我们才知道第二次查询的id,等等

但这意味着运行3个查询,并丢失IO洗牌

有更好的方法吗?我觉得我在我的应用程序中做了太多的工作,而这应该在cypher中完成。我查看了D3示例,但没有看到这种查询

谢谢

迈克这行吗

MATCH (n)-[r]-(m)-[s]-(o) WHERE id(n) IN [501] RETURN n, r, m, s, o

这对你有用吗

MATCH (n)-[r1]-(m1)-[r2]-(m2)-[r3]-(m3)
WHERE ID(n) = 501 AND
  ID(m2) IN [502,511,1111] AND
  ID(m3) IN [512,519,1116,1130]
RETURN n, r1, m1, r2, m2, r3, m3;

为什么不把这三个要素结合起来:

MATCH (n)-[r]-(m) 
WHERE id(n) IN [501]
WITH m 
MATCH (m)-[s]-(o)
WITH o
MATCH (o)-[t]-(p)
RETURN o,t,p

这与其他答案之间的区别在于,这将重新审视关系,特别是因为没有指定方向,如果这是您想要的。

如何:使用
“resultDataContents”:[“graph”]

或者如果你想节省带宽

MATCH path = (n)-[*..3]-(m)
WHERE id(n) IN [501] 
RETURN [x in nodes(path) | id(x)] as node_ids, [x in rels(path) | id(x)] as rel_ids

谢谢你的回答,它们对我来说并不合适

我这样做:

idsTodo
设置为初始节点

然后运行以下命令:

MATCH (n)-[r]->(m) WHERE id(n) IN {idsTodo} RETURN n, r, m 
idsTodo
添加到
idstone
然后将m.id添加到
idsTodo
,然后减去
idstone

然后再次运行查询,再重复2次


最后,我得到了每个节点及其关系。

您可以运行以下查询或类似查询,但概念应该很容易理解:

MATCH (n)-[r*1..3]-(m) WHERE id(n) IN [501] RETURN n, r, m 
其中,
*1..3
表示从远离n节点的1到3个关系进行匹配


这样,它只是一个查询,应该比运行三个单独的查询要快得多

您能澄清三次您在做什么吗?另外,这不应该总共加上4个查询吗?这有帮助吗?IN子句随下一级节点不断变化。有没有办法在一个问题上做到这一点?也许。我假设如果(a)-(b)没有任何其他连接的节点,这将不起作用。
匹配(a)-[a1]-(b)-[b1*0..1]-(c)-[c1*0..1]-(d)其中[501]中的id(a)返回a,a1,b,b1,c,c1,d
很有趣,但有很多冗余数据。对于每个结果,我不需要
(a)-(a1)-(b)-(b1)
。我只想用
(c)-[c1]-(d)
来做这些。嗨,赛博山姆,不,那不行。在我完成第一次查询之前,我不会知道第二次和第三次查询中的Id。嗨@Luane,谢谢。我用这个做了一些测试
返回不同的o、t、p
减少返回的行数。它还返回“重复路径”,例如“o,t,p”和“p,t,o”。目前为止最好的答案。(就像你在回答中说的:-)
MATCH (n)-[r*1..3]-(m) WHERE id(n) IN [501] RETURN n, r, m