Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Neo4j cypher查询中包含特定于“展开”块中返回的每个节点的关系列表?_Neo4j_Cypher - Fatal编程技术网

如何在Neo4j cypher查询中包含特定于“展开”块中返回的每个节点的关系列表?

如何在Neo4j cypher查询中包含特定于“展开”块中返回的每个节点的关系列表?,neo4j,cypher,Neo4j,Cypher,给定一个图表,其中一个组织的成员与该组织有一个或多个关系,并且成员有事件,我试图返回一个事件列表,每个事件列表包括关联成员及其与该组织的关系列表 图形结构: (组织)(事件) 我当前正在尝试的查询: MATCH (incidents:Incident)<-[:HAS]-(member:Person)-[rels]->(org:Org { orgId: $orgId }) WITH org, member, rels, collect(incident

给定一个图表,其中一个组织的成员与该组织有一个或多个关系,并且成员有事件,我试图返回一个事件列表,每个事件列表包括关联成员及其与该组织的关系列表

图形结构:
(组织)(事件)

我当前正在尝试的查询:

MATCH (incidents:Incident)<-[:HAS]-(member:Person)-[rels]->(org:Org {
  orgId: $orgId
})

WITH org,
     member,
    rels,
     collect(incidents) AS collectedIncidents
UNWIND collectedIncidents AS incident
RETURN incident {
       . *,
         org:properties(org),
         member:properties(member),
         roles: rels
       } AS result
  ORDER BY incident.createdAt DESC
  SKIP $skip
  LIMIT $limit

请注意,在这里,我在一个成员上创建了两个事件,我得到了4个结果。我还尝试在
WITH
语句中收集
rels
,它提供了一些同样奇怪的结果


我如何获得唯一事件列表,包括相关成员以及该成员与组织的关系?理想情况下,我只想要数组中的关系类型(假设与组织可能有一个或多个关系)。

您可以使用
type()
collect()
函数从
rels
中提取关系类型,并将其作为列表

collect(DISTINCT type(rels))
将为您留下作为字符串数组的不同角色

您可能需要考虑在<代码> >集合()/<代码>事件中确保< <代码>不同的< /代码>,以便在解开时没有重复的结果。

然后,您的查询将如下所示:

MATCH (incidents:Incident)<-[:HAS]-(member:Person)-[rels]->(org:Org {
  orgId: $orgId
})

WITH org, member, collect(DISTINCT type(rels)) as roles, collect(DISTINCT incidents) AS collectedIncidents
UNWIND collectedIncidents AS incident
RETURN incident {
       . *,
         org:properties(org),
         member:properties(member),
         roles: roles
       } AS result
  ORDER BY incident.createdAt DESC
  SKIP $skip
  LIMIT $limit
匹配(事件:事件)(组织:组织){
orgId:$orgId
})
使用组织、成员、收集(不同类型(rels))作为角色,收集(不同事件)作为收集事件
将收集的事件作为事件展开
返回事件{
. *,
组织:属性(组织),
成员:物业(成员),
角色:角色
}结果
按事件排序。创建数据描述
跳过$SKIP
限额$LIMIT
MATCH (incidents:Incident)<-[:HAS]-(member:Person)-[rels]->(org:Org {
  orgId: $orgId
})

WITH org, member, collect(DISTINCT type(rels)) as roles, collect(DISTINCT incidents) AS collectedIncidents
UNWIND collectedIncidents AS incident
RETURN incident {
       . *,
         org:properties(org),
         member:properties(member),
         roles: roles
       } AS result
  ORDER BY incident.createdAt DESC
  SKIP $skip
  LIMIT $limit