繁体   English   中英

Neo4j密码使用ALL关系获取与另一个节点相关的节点

[英]Neo4j cypher getting nodes that are related to another node using ALL relations

我正在执行PoC,以查找图形数据库是否适合我们的需求。

我们进行了一项调查,受访者回答了问题。 我们希望使用一组(主要是两个或三个)问题中的每种可能的答案组合将这些受访者分组。

我有以下节点和关系

(:Question)-[:HasAnswer]->(:Answer)
(:Respondent)-[:Answered]->(:Answer)
(:Answer)-[:BelongsTo]->(:WeightingGroup)

其中:

  • 问题:问题
  • 答案:一个问题的可能答案
  • 受访者:回答问题的人
  • 已回答:回答问题的受访者之间的关系
  • WeightingGroup:一组形成给定答案的唯一组合的答案
  • BelongsTo:答案与形成答案组的权重组之间的关系。

我的目标是收到这样的结果:

/----------------------------------------------\
| Q1                 | Q2                 | n  |
|--------------------+-------------------------|
| Answer1            | Answer1            | 23 | 
| Answer1            | Answer2            | 12 | 
| Answer1            | Answer3            | 54 | 
| Answer2            | Answer1            | 65 | 
| Answer2            | Answer1            |  5 | 
| Answer2            | Answer1            | 15 | 
\--------------------+--------------------+----/

要么:

/-------------------------\
| Q1, Q2             | n  |
|--------------------+----|
| Answer1, Answer2   | 23 | 
| Answer1, Answer2   | 12 | 
| Answer1, Answer3   | 54 | 
| Answer2, Answer1   | 65 | 
| Answer2, Answer1   |  5 | 
| Answer2, Answer1   | 15 | 
\--------------------+----/

其中,n是给出两个答案的受访者人数。

但是,当我运行此查询时:

// Aantal antwoorden per wegingsgroep
match (w:WeightingGroup)-[]->(a:Answer)<-[:Answered]-(r:Respondent)
with w, collect(distinct a.Text) as answers, count(distinct r) as n
return answers, w.Weight, n

看来返回的n =回答了answer1或answer2的受访者人数。

如何获得给出答案1和答案2的受访者人数?

提前致谢!

这样的事情怎么样:每个组收集答案,每个被访者收集答案,过滤所有被访者的答案在组的答案中的位置。 我认为,那么依靠受访者就可以了(由于已经收集了答案,因此您必须提取答案文本。)

MATCH (g:WeightingGroup)<-[:BelongsTo]-(a)
WITH g, collect(a) as apg
MATCH (r:Respondent)-[:Answered]->(a)
WITH g, apg, r, collect(a) as apr
WHERE ALL(a IN apr WHERE a IN apg)
RETURN g.Weight, EXTRACT(a IN apg | a.Text), count(r) as n

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM