Collections Neo4j中的并集和计数集合

Collections Neo4j中的并集和计数集合,collections,neo4j,cypher,union,intersection,Collections,Neo4j,Cypher,Union,Intersection,我的简单数据库包含相互链接的“术语”和“代码”节点。 有两种类型的关系 “术语”和“代码”之间的关系称为:代码和是无向的(或在两个方向上读取相等)。 “术语”之间的关系称为:NT(意思是狭义术语)和直接的 我想从上到下遍历所有的“术语”,收集所有唯一的代码并计算它们 这是我的疑问: MATCH (a)-[:NT*]->(b), (a)-[:CODE]-(c), (b)-[:CODE]-(d) WHERE a.btqty = 0 RETURN a.termid AS termid, a.ma

我的简单数据库包含相互链接的“术语”和“代码”节点。 有两种类型的关系

“术语”和“代码”之间的关系称为:代码和是无向的(或在两个方向上读取相等)。 “术语”之间的关系称为:NT(意思是狭义术语)和直接的

我想从上到下遍历所有的“术语”,收集所有唯一的代码并计算它们

这是我的疑问:

MATCH (a)-[:NT*]->(b), (a)-[:CODE]-(c), (b)-[:CODE]-(d)
WHERE a.btqty = 0
RETURN a.termid AS termid, a.maxlen AS maxlen, COUNT(DISTINCT c.code) + COUNT(DISTINCT d.code) AS total, COLLECT(DISTINCT c.code) + COLLECT(DISTINCT d.code) AS codes
ORDER BY termid;
这就是我得到的:

termid  maxlen  total   codes
22  2   3   ["S70","S43","S70"]
25  4   9   ["S20","S21","S54","S61","S63","S63","S21","S61","S54"]
26  2   9   ["S99","S98","S29","S13","S13","S20","S29","S14","S15"]
68  5   13  ["S38","S11","S12","S11","S12","S38","S37","S21","S36","S22","S98","S63","S58"]
123 2   3   ["S38","S12","S12"]
154 2   2   ["S58","S58"]
155 4   3   ["S63","S62","S63"]
159 2   2   ["S36","S36"]
...
我需要清除集合中的重复项,并按如下方式正确计数:

termid  maxlen  total   codes
22  2   2   ["S43","S70"]
25  4   5   ["S20","S21","S54","S61","S63"]
26  2   7   ["S99","S98","S29","S13","S20","S14","S15"]
68  5   10  ["S38","S11","S12","S37","S21","S36","S22","S98","S63","S58"]
123 2   2   ["S38","S12"]
154 2   1   ["S58"]
155 4   2   ["S63","S62"]
159 2   1   ["S36"]
...
我认为这是关于REDUCE函数的应用,但我不知道如何使用它


谢谢你的帮助

你说得对,这可以用
REDUCE
解决。在reduce中,您需要检查累加器中是否已经存在当前元素,并有条件地修改它:

MATCH (a)-[:NT*]->(b), (a)-[:CODE]-(c), (b)-[:CODE]-(d)
WHERE a.btqty = 0
WITH a.termid AS termid, a.maxlen AS maxlen, 
   REDUCE(uniqueCodes=[], 
         x in COLLECT(DISTINCT c.code) + COLLECT(DISTINCT d.code) |
          CASE WHEN x IN uniqueCodes THEN uniqueCodes ELSE uniqueCodes+x END
   ) AS codes
ORDER BY termid
RETURN termid, maxlen, count(codes) as total, codes

非常感谢!现在我知道REDUCE是如何工作的了。顺便说一句,从长度(代码)到总计数(代码)。非常感谢你!!!