【问题标题】:neo4j cypher multi relationship between nodes节点之间的neo4j cypher多重关系
【发布时间】:2013-12-26 05:51:14
【问题描述】:

例如:

a-[r]->b,两个节点之间有多个r,每个r.userId都是唯一的。
(例如:a-[r:R {userId:"user1"}]->b, (a-[r:R{userId:"user2"}]->b,
对于 a-[r]->c

也是如此

而情况是a-[r]->b有关系:r.userId = amdin,但是a-[r]->c没有这个关系。

我怎么只能返回 c。

我尝试创建密码:

“匹配 (a:SomeLabel)-[r:SomeR]->(any:SomeLabel)”
"其中 id(a)=0 AND r.userId \"admin\" "
"返回任何";

但这也会返回 b ,因为 a->b 有其他关系:r.userId=xxxx

如何编写密码以返回不包含 user.Id="admin" 的节点......

如果你不明白我在说什么,请告诉我......我需要你的帮助来处理这个案子......谢谢

我在下面画了一张图,名为sr但属性不同的多关系(userId是唯一的), 我想找到与节点 A 相关但不包含 sr {userId:admin} 的所有节点,我在那里添加了一个红色下划线。所以如图,节点B有关系sr {userId:admin},所以我只想返回节点C,没有节点B

【问题讨论】:

    标签: neo4j


    【解决方案1】:

    对于显示图形问题的简单表示,graphgists 非常有用,因为人们可以探索数据。 我根据您的描述创建了一个:http://gist.neo4j.org/?94ef056e41153b116e4f

    对于您的问题,您可以收集每对节点的关系中涉及的所有用户名,并根据这些用户名进行过滤:

    MATCH (a { name:'A' })-[r:sr]->b
    WITH a,b, collect(r.name) AS usernames
    WHERE NOT 'admin' IN usernames
    RETURN a, b
    

    【讨论】:

      【解决方案2】:

      你的问题很不清楚。我的解释是,您希望找到未连接到具有 R 类型关系的节点 a 的节点 c

      您基本上想要进行否定匹配,也就是搜索不存在的模式。可以使用where not 检索负面模式:

      MATCH (a:SomeLabel), (c:SomeLabel)
      WHERE ID(a)=0 AND NOT (a)-[:R]->(c)
      RETURN c
      

      这将返回所有未连接到aSomeLabel 节点的列表。

      请参阅参考手册中的http://docs.neo4j.org/chunked/stable/query-where.html#query-where-patterns

      【讨论】:

      • 我添加了一张图片来深入解释我的问题,所以你现在明白了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多