Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
相当于sql交叉联接的Neo4j_Neo4j_Cross Join - Fatal编程技术网

相当于sql交叉联接的Neo4j

相当于sql交叉联接的Neo4j,neo4j,cross-join,Neo4j,Cross Join,我已经在neo4j中返回了1000个节点的列表。我想将这个列表与它自身交叉,这样我就可以在所有成对组合之间创建关系。在sql中,我只需要使用交叉连接。是否有一个等效的函数/过程允许我在neo4j中执行相同的操作 我的第一个方法是执行以下操作: MATCH (b:BASKET) WITH count(b) AS GlobalBasketCount MATCH (n:PRODUCT)-[:COLLECTIONS]-(b:BASKET) WITH n,count(b) AS nBasketCount,

我已经在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
比赛(b:篮筐)
将计数(b)作为全局搜索计数
匹配(n:产品)-[:集合]-(b:篮子)
使用n,将(b)计数为nBasketCount,GlobalBasketCount
其中nBasketCount>0.001*GlobalBasketCount
匹配(m:产品)-[:集合]-(b:篮子)
使用m,将(b)计数为mBasketCount,n,nBasketCount,GlobalBasketCount
其中mBasketCount>0.001*全局sketcount和m.id(n)
有m、n、r、nBasketCount、mBasketCount
设置r.BasketCountProduct=nBasketCount*mBasketCount
但是,这需要通过匹配查询创建1001次相同的产品列表,这是非常低效的

旁注

m.id < n.id
m.id
是为了防止重复对

试试这个:

MATCH (n:Foo)
WITH collect(n) as nodes
UNWIND nodes as n1
UNWIND nodes as n2
WITH n1,n2
WHERE id(n1) < id(n2)
...
匹配(n:Foo)
使用collect(n)作为节点
将节点作为n1展开
将节点作为n2展开
用n1,n2
其中id(n1)
这是正确的选择(请原谅双关语),谢谢。然而,在我的特定查询中,有一个与每个节点相关联的数字“nBasketCount”。我希望这些编号与各自节点的关联能够在收集和展开过程中幸存下来。我现在已经尝试过了,但是我最近一次尝试是将成对的数据收集为数组,但是unwind不喜欢返回数组。我得到的错误是:“预期
n1
是一个节点或关系,但它是```有办法保留关联吗?结果是数组的展开是合法的,问题出在WHERE子句上。它被应用于未缠绕的阵列,但显然在一组阵列上没有顺序,至少在neo4j中是这样。我仍在研究这些结果数组的展开,如果我发现如何展开,为了完整性,我将添加一条注释。好的,这些结果数组的“展开”非常容易。所以我有数组的n1和n2列表,然后我在我的RETURN子句中简单地索引这些数组的元素:RETURN n1[0],n1[1],n2[0],n2[1]