Neo4j 如何为流中的每个记录展开集合、执行操作和重新组装集合?

Neo4j 如何为流中的每个记录展开集合、执行操作和重新组装集合?,neo4j,cypher,Neo4j,Cypher,我正在运行一个随机游走算法来生成一个时间事件链。结果集合中的每个条目都是一个节点id。例如: [43116, 43116, 43116, 43116, 43116, 43116] [61412, 61416, 4948, 61417, 61419, 61420] ... 对于从流返回的每一行,如何展开值、对该元素执行algo.getNodeById(node_id)并将这些结果打包回集合 密码查询如下: CALL algo.randomWalk.stream(null, 5, 20, {

我正在运行一个随机游走算法来生成一个时间事件链。结果集合中的每个条目都是一个节点id。例如:

[43116, 43116, 43116, 43116, 43116, 43116]
[61412, 61416, 4948, 61417, 61419, 61420]
...
对于从流返回的每一行,如何展开值、对该元素执行algo.getNodeById(node_id)并将这些结果打包回集合

密码查询如下:

CALL algo.randomWalk.stream(null, 5, 20, {
  nodeQuery: "MATCH (a:Asset) RETURN id(a) as id",
  relationshipQuery: "MATCH (a1:Asset)<-[:PATIENT]-(e1:EVENT)-[:NEXT]->(e2:EVENT)-[:PATIENT]-(a2:Asset) RETURN id(a1) as source, id(a2) as target",
  graph: "cypher" })
YIELD nodeIds
调用algo.randomWalk.stream(null、5、20、{
nodeQuery:“匹配(a:资产)返回id(a)作为id”,
relationshipQuery:“匹配(a1:资产)(e2:事件)-[:患者]-(a2:资产)返回id(a1)作为源,id(a2)作为目标”,
图形:“cypher”})
产量结节

Cypher在对集合执行
展开后不会删除该集合。因此,无需重新创建集合

例如:

WITH [61412, 61416, 4948, 61417, 61419, 61420] AS data
UNWIND data AS d
RETURN data, d;
返回以下内容:

╒════════════════════════════════════╤═════╕
│"data"                              │"d"  │
╞════════════════════════════════════╪═════╡
│[61412,61416,4948,61417,61419,61420]│61412│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61416│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│4948 │
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61417│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61419│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61420│
└────────────────────────────────────┴─────┘

Cypher在对集合执行
展开
后不会删除该集合。因此,无需重新创建集合

例如:

WITH [61412, 61416, 4948, 61417, 61419, 61420] AS data
UNWIND data AS d
RETURN data, d;
返回以下内容:

╒════════════════════════════════════╤═════╕
│"data"                              │"d"  │
╞════════════════════════════════════╪═════╡
│[61412,61416,4948,61417,61419,61420]│61412│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61416│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│4948 │
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61417│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61419│
├────────────────────────────────────┼─────┤
│[61412,61416,4948,61417,61419,61420]│61420│
└────────────────────────────────────┴─────┘
(我的第二个答案是基于对我第一个答案的评论中的澄清。)

您可以改为这样做(使用
algo.getNodeById()
,它获取节点ID列表):

在这两个查询中,都需要使用
WITH DISTINCT nodeId
子句来删除重复项。

(我的第二个答案基于对第一个答案的注释中的澄清。)

您可以改为这样做(使用
algo.getNodeById()
,它获取节点ID列表):


在这两个查询中,都需要使用
WITH DISTINCT nodeId
子句来删除重复项。

对,我想我理解Cypher在展开时不会破坏集合。我想我提出的问题是:如何对“data”中的每个元素执行节点查找功能,并将这些值作为集合而不是“d”中的值返回?对,我想我知道Cypher在展开时不会破坏集合。我想我提出的问题是:如何对“data”中的每个元素执行节点查找函数,并将这些值作为集合而不是“d”中的值返回?