Neo4j 正确使用放卷和收卷
我正在尝试收集Neo4j中解开密码的每个迭代的ID列表。和往常一样,COLLECT收集所有ID以进行展开,然后将所有内容作为一个向量返回。但我想得到向量的向量Neo4j 正确使用放卷和收卷,neo4j,cypher,Neo4j,Cypher,我正在尝试收集Neo4j中解开密码的每个迭代的ID列表。和往常一样,COLLECT收集所有ID以进行展开,然后将所有内容作为一个向量返回。但我想得到向量的向量 MATCH (property:Product)<-[:HAS_PRODUCT]-(s1:Session) WHERE property.products_id = 12345 with distinct s1.session_id as session_id limit 2 with collect (session_id) as
MATCH (property:Product)<-[:HAS_PRODUCT]-(s1:Session)
WHERE property.products_id = 12345
with distinct s1.session_id as session_id
limit 2
with collect (session_id) as session_ids
unwind session_ids as session_id
MATCH (property:Product)<-[contains:CONTAINS]-(target:Session {session_id: session_id})
with collect(distinct id(property)) as vector
return vector
session\u id
是两个session\u id的列表。每个会话id应该产生一个向量,所以对于2个会话id,我希望得到向量的向量
MATCH (property:Product)<-[:HAS_PRODUCT]-(s1:Session)
WHERE property.products_id = 12345
with distinct s1.session_id as session_id
limit 2
with collect (session_id) as session_ids
unwind session_ids as session_id
MATCH (property:Product)<-[contains:CONTAINS]-(target:Session {session_id: session_id})
with collect(distinct id(property)) as vector
return vector
如果我只运行一次这两个会话(即,不使用展开
),我会得到如下所示的预期结果
[22238, 51257]
[22238, 25626, 51257]
通过使用
展开
,这就是我想要的。是否有任何解决方法可以只为展开的每个迭代收集ID,因此您缺少的部分是分组键在聚合中的工作方式。非聚合项充当分组键,为将发出的行以及应用聚合的行提供上下文
您的collect()聚合没有其他术语,因此没有分组键,最终只有一个列表
如果希望collect()应用于每个会话\u id,则需要将会话\u id作为非聚合项包含,以便它可以用作聚合的分组键:
...
unwind session_ids as session_id
MATCH (property:Product)<-[contains:CONTAINS]-(target:Session {session_id: session_id})
with session_id, collect(distinct id(property)) as vector
return vector
。。。
将会话\u id作为会话\u id展开
匹配(属性:产品)