我在neo4j中返回了1000个节点的列表。我想与自己交叉这个列表,这样我就可以在所有成对组合之间建立关系。在sql中我只是使用交叉连接。是否存在允许我在neo4j中执行相同操作的等效函数/过程。
我的第一个方法是做以下事情:
MATCH (b:BASKET)
WITH count(b) AS GlobalBasketCount
MATCH (n:PRODUCT)-[:COLLECTIONS]-(b:BASKET)
WITH n,count(b) AS nBasketCount,GlobalBasketCount
WHERE nBasketCount > 0.001*GlobalBasketCount
MATCH (m:PRODUCT)-[:COLLECTIONS]-(b:BASKET)
WITH m,count(b) AS mBasketCount,n,nBasketCount,GlobalBasketCount
WHERE mBasketCount > 0.001*GlobalBasketCount AND m.id < n.id
CREATE (m)-[r:RELATIONSHIP]->(n)
WITH m,n,r,nBasketCount,mBasketCount
SET r.BasketCountProduct = nBasketCount*mBasketCount
但是,这需要通过匹配查询创建1001次相同的产品列表,效率非常低。
旁注:
m.id < n.id
是为了防止重复对。
答案 0 :(得分:1)
试试这个:
MATCH (n:Foo)
WITH collect(n) as nodes
UNWIND nodes as n1
UNWIND nodes as n2
WITH n1,n2
WHERE id(n1) < id(n2)
...