在Neo4j中使用展开装置有困难

在Neo4j中使用展开装置有困难,neo4j,Neo4j,我对Neo4j非常陌生,所以这可能是一个简单的问题。 我有几百个具有属性“seq”(用于序列)的节点。这个数字基本上代表一个月的哪一天。所以这几百个节点的seq属性都在1到31之间。我想将具有相同seq的所有节点合并到一个节点中,以便将seq=1的所有节点合并到一个“一月一日”节点中。seq=2的所有节点都被合并成一个“1月2日”节点,以此类推。我有一个“pat_id”属性,该属性将被合并成一天内所有合并NOE的一个数组 这是我的密码: WITH range(1,31) as counts UN

我对Neo4j非常陌生,所以这可能是一个简单的问题。 我有几百个具有属性“seq”(用于序列)的节点。这个数字基本上代表一个月的哪一天。所以这几百个节点的seq属性都在1到31之间。我想将具有相同seq的所有节点合并到一个节点中,以便将seq=1的所有节点合并到一个“一月一日”节点中。seq=2的所有节点都被合并成一个“1月2日”节点,以此类推。我有一个“pat_id”属性,该属性将被合并成一天内所有合并NOE的一个数组

这是我的密码:

WITH range(1,31) as counts
UNWIND counts AS cnt
MATCH (n:OUTPT {seq:cnt})
WITH collect(n) AS nodes
CALL apoc.refactor.mergeNodes(nodes, {properties: {
pat_id:'combine',
seq:'discard'}, mergeRels:true})
YIELD node
RETURN node
我最初尝试用FOREACH循环来实现这一点,但我无法在FOREACH中进行匹配。 我一直在做一个展开,但它只是将节点与第一个值(seq=1)合并。我假设这是因为RETURN语句结束了循环。但是当我删除RETURN语句时,会出现以下错误:

查询不能以CALL结束(必须是RETURN或update子句)(第5行第1列(偏移量:99)) 调用apoc.refactor.mergeNodes(节点,{properties:{


如有任何帮助,我们将不胜感激。

此线路存在问题:

WITH collect(n) AS nodes
您已经匹配到所有节点:输出序列号在1-31之间的节点,然后将它们聚合到单个大型集合中,然后将它们合并到单个节点中

如果要根据序列号收集节点,则序列号(在您的情况下,
cnt
)需要是聚合的分组键:

WITH cnt, collect(n) AS nodes
这将为每个distinct
cnt
value获得一行,并在相关行上显示具有相同计数的节点列表

因为每行执行Cypher操作,所以APOC重构调用将每行执行。因为每行与不同的cnt值关联,并且每行具有不同的列表,所以您将分别对每个列表执行重构


输出为每cnt值一行,每行一个节点(将该行列表中的所有节点合并为一个节点的结果).

非常感谢您的回答。这完全符合我的要求。我想我误解了UNWIND的工作原理。我认为UNWIND起到了迭代器的作用,在UNWIND 31次后会循环代码。我没有意识到它将1-31次聚合为一行。再次感谢您的帮助,尤其是对UNWIND的彻底解释ationIt与此稍有不同。所有的展开都与collect()相反。对于集合中的每个元素,它都会发出一行。每行都会执行密码操作,因此效果看起来像是一次迭代。但是聚合(如collect())不受此约束,因为它们根据分组键收集多行。