【问题标题】:Get all connecting node in neo4j for all nodes matching a query获取neo4j中所有与查询匹配的节点的所有连接节点
【发布时间】:2018-05-04 10:36:55
【问题描述】:

我的 neo4j 数据库中有 2 种类型的节点

技能和技能集群

Skill 节点作为一个或多个 SkillCluster 节点的有向边 [BelongsTo 关系]。我想找到属于特定技能集群的所有技能名称及其连接技能集群名称。我写了一个查询来查找属于这样一个技能集群的所有技能 -

match(cluster:SkillCluster {Name: 'Engineering'})<-[:BelongsTo]-(skill:Skill) return skill.Name, cluster.Name;

这个查询返回这个输出

skill.Name                                      cluster.Name
"Dxdesigner"                                    "Engineering"
"Electromagnetic Interference (EMI) Engineer"   "Engineering"
"SEAM 3D"                                       "Engineering"
"Electromagnetic Interference (EMI) Mitigation" "Engineering"

skill Dxdesigner 连接到 2 个技能集群节点,但我的查询没有返回它们。

【问题讨论】:

  • 两个集群是否都有 Name="Engineering"?
  • 不,我对标签 SkillCluster 的属性名称有唯一约束

标签: neo4j cypher


【解决方案1】:

试试:

match(cluster:SkillCluster {Name: 'Engineering'})<-[:BelongsTo]-
                                       (skill:Skill)-
                                       [:BelongsTo]->(cluster2:SkillCluster) 
return skill.Name, cluster.Name, cluster2.Name;

另外,您不需要返回 cluster.Name,因为您已经将 Name 设置为“Engineering”。所以它总是会返回工程。

更新:根据 InverseFalcon 的评论:

match(cluster:SkillCluster {Name: 'Engineering'})<-[:BelongsTo]-
                                       (skill:Skill)-
                                       [:BelongsTo]->(cluster2:SkillCluster) 
return skill.Name, collect(cluster2.Name) + cluster.Name as clusters;

【讨论】:

  • 将集群名称保留为集合可能会更好一些,并添加第一个集群的名称:return skill.Name, collect(cluster2.Name) + cluster.Name as clusters
  • @InverseFalcon 太好了。感谢您的帮助。我还不太精通 Cypher。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多