【发布时间】:2014-02-18 14:31:52
【问题描述】:
我在 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.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),然后它会尝试查找这些概念节点(c1 和 c2)出现在哪些不同的上下文(ctx)中,但只有那些uid 与@987654334 匹配的上下文@ 关系 rel (rel.context) 的 .context 属性,然后在表中返回它们,其中我们有源 id 和 name,目标 id 和 name,连接id,以及该关系的.context id 属性和与id 关联的上下文名称。
所以一切正常,但问题是:为什么?
我的意思是,Cypher 是如何将右侧的 ctx.uid 与右侧的 rel.context 如此巧妙地匹配,以知道它应该准确地插入到结果表的正确位置?
有人能解释一下这背后的魔力吗?
或者我完全错了,只是得到了混乱的结果?
谢谢!
【问题讨论】:
-
您可以将
PROFILE添加到密码查询的开头,以查看有关它在做什么的更多详细信息。