有以下图表:
带有子节点的节点g1(a,b)
具有子节点的节点g2(b,c)
使用查询
MATCH (n)-[]-(m) WHERE ID(m) = id RETURN n
id 节点g1的id,我得到a和b,反之亦然,当使用g2的id时。我想了解的是如何得到这两个结果的交集,在这种情况下,第一次返回(a,b)和第二次返回(b,c)< / strong>获得最终结果(b)。
我尝试使用WITH原因,但我无法达到预期效果。请记住,我是Neo4j的新手,只是经过几次尝试失败,Neo4j文档研究,一般谷歌搜索和 计算器。
Edit1 (我的一次尝试):
MATCH (n)-[]->(m)
WHERE ID(m) = 750
WITH n
MATCH (o)-[]->(b)
WHERE ID(b) = 684 and o = n
RETURN o
EDIT2:
我在两个图上表示为相同的节点(b)实际上是db上的两个不同节点,每个节点与不同的图(g1和g2)相关。代表性地,它们是相同的,因为它们具有完全相同的信息(标签和属性),但在数据库中,您不是。我很抱歉,因为在这件事上没有更明确是我的错:(
编辑3:
为什么我不为单个节点使用单个节点(b)
使用上面的图表作为示例,假设我还有另一层,所以:在g1上,子节点(b)作为子节点(e),而在g2上,子节点(b)作为子节点(f)。如果我将(b)作为单个节点,当我创建(e)和(f)时,我只能将它添加到(b)失去层次结构,变得无法区分它们中的哪一个,(e)或(f),属于g1 ou g2。
答案 0 :(得分:2)
这应该有效(假设您将id1
和id2
作为参数传递):
MATCH (a)--(n)--(c)
WHERE ID(a) = {id1} AND ID(c) = {id2}
RETURN n;
[更新,基于评论的新信息]
如果您有“同一”节点的多个“克隆”,并且您希望快速确定哪些克隆相关而无需执行大量(慢)属性比较,则可以添加关系(例如,键入“: CLONE“)克隆之间。这样,像这样的查询就可以了:
MATCH (a)--(m)-[:CLONE]-(n)--(c)
WHERE ID(a) = {id1} AND ID(c) = {id2}
RETURN m, n;
答案 1 :(得分:0)
通过使用此查询,您可以找到节点的重复性- [1] 单节点重复-
MATCH pathx =(n)-[:Relationship]-(find) WHERE find.name = "action" RETURN pathx;
[2] 或仅提供直接父节点的两个节点
MATCH pathx =(n)-[:Relationship]-(find), pathy= (p)-[:Relationship]
-(seek) WHERE find.name = "action" AND seek.name="requestID" RETURN pathx,
pathy;
[3] 或查找整个网络,即所有连接的节点-
MATCH pathx =(n)--()-[:Relationship]-(find), pathy= (p)--()-[:Relationship]-
(seek) WHERE find.name = "action"
AND seek.name="requestID" RETURN pathx, pathy;