【问题标题】:Aggregating relationships via cypher通过密码聚合关系
【发布时间】:2017-03-09 15:20:52
【问题描述】:

我很确定我在某个地方看到过,但我尝试过的所有关键字都是空的。

我有一个通过文档连接个人和公司的图表:

(:Person/:Company)-[ ]-(:Document)-[ ]-(:Person/:Company)

我想要做的是返回一个图表,该图表直接显示个人和公司之间的联系,以及基于他们之间的联系数量的关系强度。

我用

获取数据
MATCH (p)-[]-(d:Document)-[]-(c)
WHERE p:Person or p:Company and c:Person or c:Company
WITH p,c, count(d) as rel
RETURN p,rel,c

但是在 Neo4J-Browser 中,节点显示没有任何关系。有没有办法实现这一点,还是我必须创建某种元关系?

【问题讨论】:

  • 双击一个节点弹出打开关系。
  • 但随后它会通过文档打开所有关系。我希望直接显示人员/公司节点之间的关系。
  • 匹配 (p:Person)-[]-(d:Document)-[]-(c:Company) 选择应该足够了,因为关系上没有方向。
  • 那么你必须在关系上有一个别名并返回它们。
  • 但我不想归还那些关系。我有一个数据模型 (:Person/:Company)-[ ]-(:Document)-[ ]-(:Person/:Company) 并希望在 Neo4J-Browser als (:Person/:Company) 中可视化- [连接数]-(:Person/:Company) 无需实际更改底层数据模型。

标签: neo4j cypher


【解决方案1】:

如果您安装 APOC 程序,您将能够创建 virtual relationships 用于可视化但实际上并未存储在数据库中。

MATCH (p)-[]-(d:Document)-[]-(c)
WHERE (p:Person or p:Company AND c:Person or c:Company)
 AND  id(p) < id(c)
WITH p,c, count(d) as relStrength
CALL apoc.create.vRelationship(p,'REL',{strength:relStrength}, c) YIELD rel
RETURN p,rel,c

我还在 p 和 c 的 id 上添加了一个谓词,这样您就不会在 p 和 c 切换时重复相同的两个节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多