Neo4j foreach和reduce没有帮助
我正在处理一家公司的数据,该数据以一种方式提供服务,其中每个服务请求都有一个ID和参与方,每个参与方可以是两个角色中的一个角色角色角色一个是服务提供者角色二个是服务请求者我正在以一种方式映射此数据,每个节点都有两个列表属性,属性一包含此节点所涉及的所有服务请求ID,另一个列表属性是每个特定请求ID(服务提供者或请求者)的给定节点角色 示例****:节点1请求服务X此请求的ID为1节点2和节点3作为服务X的提供者响应了ID为1的请求 在节点1的列表属性ID的第一个元素中,ID1被保存,列表属性角色的第一个元素中的请求者在节点2和节点3中也会发生同样的情况,其中ID1被保存在列表属性ID的第一个元素中,提供者被保存在角色列表属性的第一个元素中,因此最终要让参与服务请求的各方使用此代码ID1 匹配(n:Client),其中n.id[0]=“1”和n.Role[0]=“请求者” 与n 匹配(m:Client),其中m.id[0]=n.id[0]和m.Role[0]='Provider' 返回n,mNeo4j foreach和reduce没有帮助,neo4j,Neo4j,我正在处理一家公司的数据,该数据以一种方式提供服务,其中每个服务请求都有一个ID和参与方,每个参与方可以是两个角色中的一个角色角色角色一个是服务提供者角色二个是服务请求者我正在以一种方式映射此数据,每个节点都有两个列表属性,属性一包含此节点所涉及的所有服务请求ID,另一个列表属性是每个特定请求ID(服务提供者或请求者)的给定节点角色 示例****:节点1请求服务X此请求的ID为1节点2和节点3作为服务X的提供者响应了ID为1的请求 在节点1的列表属性ID的第一个元素中,ID1被保存,列表属性角色
这对单个服务请求很有效,但我想对数百万个请求执行此操作,因此我需要迭代保存的每个n.Nodes(请求者)ID,获取每个ID值在列表中的位置,然后使用相同的位置搜索m.Nodes(提供者)中相应的列表属性位置,以将相同的ID与角色(提供者)匹配由于每个节点都可以有许多ID和角色,我尝试使用reduce和foreach,但没有找到我要查找的内容您需要使用更面向图形的数据模型。正如您已经意识到的,在用例中使用列表属性是极其复杂和低效的 下面是一个更适合图形数据库的数据模型示例。对于每个请求的服务,数据模型都有一个
服务
节点,对于提供或请求服务的每一方,都有一个参与方
节点。一方对其提供的每项服务都有提供的关系
,对其请求的每项服务都有请求的关系
以下Cypher查询将创建与示例场景匹配的节点和关系:
CREATE
(p1:Party {id: 123}), (p2:Party {id: 234}), (p3:Party {id: 345}),
(s1:Service {id: 10057}),
(p1)-[:REQUESTED]->(s1),
(p2)-[:PROVIDED]->(s1),
(p3)-[:PROVIDED]->(s1)
以下Cypher查询返回请求者列表和服务的任何提供者列表,其id
值为10057:
MATCH (r:Party)-[:REQUESTED]->(s:Service {id: 10057})
OPTIONAL MATCH (p:Party)-[:PROVIDED]->(s)
RETURN COLLECT(DISTINCT r) AS requesters, COLLECT(DISTINCT p) AS providers;
使用此数据模型(并假设您有合理数量的数据),您还应该在:Service(id)
上设置(或),以使匹配
子句更有效