Neo4J密码查询结果背后的魔力
我在Neo4J Cypher 2.0中有以下查询:Neo4J密码查询结果背后的魔力,neo4j,cypher,Neo4j,Cypher,我在Neo4J Cypher 2.0中有以下查询: MATCH (u:User{uid:'1111111'}), (c1:Concept), (c2:Concept), c1-[:BY]->u, c2-[:BY]->u, c1-[rel:TO]->c2 WITH c1,c2,rel MATCH c1-[:AT]->ctx, c2-[:AT]-ctx WHERE ctx.uid = rel.context RETURN c1.uid AS source_id, c1
MATCH (u:User{uid:'1111111'}), (c1:Concept), (c2:Concept),
c1-[:BY]->u, c2-[:BY]->u, c1-[rel:TO]->c2
WITH c1,c2,rel
MATCH c1-[:AT]->ctx, c2-[:AT]-ctx
WHERE ctx.uid = rel.context
RETURN c1.uid AS source_id, c1.name AS source_name,
c2.uid AS target_id, c2.name AS target_name,
rel.uid AS edge_id,
rel.context AS context_id, ctx.name AS context_name;
它所做的是查找连接到User
节点u
的Concept
标签(c1
和c2
)的所有节点,找到它们之间的(c1
到c2
)连接(rel
),然后尝试查找不同的上下文(ctx
)这些概念节点(c1
和c2
)出现在中,但只有那些uid
与关系rel
(rel.context
)的uid
属性的context
)的uid
匹配的节点才会出现,然后将它们返回到一个表中,其中有源id
和name
,目标id
和name
,连接id
,以及该关系的.context
id
属性和具有该id
的上下文的名称
所以一切都很好,但问题是:为什么
我的意思是,Cypher如何将右侧的ctx.uid
与右侧的rel.context
如此巧妙地匹配,从而知道它应该准确地插入结果表的正确位置
谁能给我解释一下这背后的魔力吗
还是我完全错了,结果很糟糕
谢谢大家! 它创建一个模式图,表示您的组合匹配模式。然后,它使用索引查找绑定节点,并开始将模式图应用到这些节点,并为找到的每个匹配返回一个结果行 在应用模式图时,它会使用WHERE条件尽早过滤掉您不想要的路径
如果找不到绑定节点,则必须遍历标签的所有节点(如:概念)或图形的所有节点(如果未指定任何标签或查找条件)。您可以将
PROFILE
添加到cypher查询的开头,以查看有关其操作的更多详细信息。