2017-08-02 128 views
2

我有以下查询:为什么我的Neo4j IN为所有结果返回false?

MATCH (a)-[r1]-(b) WITH a, b, 
COLLECT(b.primaryId) AS bAll, r1 
MATCH (b)-[r2]-(c) 
RETURN c.primaryId IN bAll 

特别地,在这里后我什么是深度2连接,同时也是深度1间的连接,即,如果A涉及B和C,以及B和C涉及彼此。

这仅返回false。但是,当我返回c.primaryId, bAll时,我可以清楚地看到值中的一些重叠。我究竟做错了什么?

编辑:包括样品响应

╒═══════╤═════════╕ 
│"id(c)"│"bAll" │ 
╞═══════╪═════════╡ 
│1077598│[902604] │ 
├───────┼─────────┤ 
│195687 │[902604] │ 
├───────┼─────────┤ 
│461579 │[902604] │ 
├───────┼─────────┤ 
│1084085│[902604] │ 
├───────┼─────────┤ 
│1295819│[902604] │ 
├───────┼─────────┤ 
│316503 │[902604] │ 
├───────┼─────────┤ 
│1505256│[902604] │ 
├───────┼─────────┤ 
│1494600│[902604] │ 
├───────┼─────────┤ 
│708871 │[902604] │ 
├───────┼─────────┤ 
│319671 │[902604] │ 
├───────┼─────────┤ 
│957553 │[902604] │ 
├───────┼─────────┤ 
│394705 │[902604] │ 
├───────┼─────────┤ 
│379116 │[902604] │ 
├───────┼─────────┤ 
│1017683│[902604] │ 
├───────┼─────────┤ 
│330049 │[902604] │ 
├───────┼─────────┤ 
│567549 │[902604] │ 
├───────┼─────────┤ 
│344636 │[902604] │ 
├───────┼─────────┤ 
│1102414│[902604] │ 
├───────┼─────────┤ 
│598267 │[540185] │ 
├───────┼─────────┤ 
│829725 │[540185] │ 
├───────┼─────────┤ 
│1010574│[540185] │ 
├───────┼─────────┤ 
│1437190│[540185] │ 
├───────┼─────────┤ 
│1094878│[540185] │ 
├───────┼─────────┤ 
│19008 │[540185] │ 
├───────┼─────────┤ 
│1084085│[540185] │ 
├───────┼─────────┤ 
│366066 │[282808] │ 
├───────┼─────────┤ 
│1443101│[282808] │ 
├───────┼─────────┤ 
│433507 │[282808] │ 
├───────┼─────────┤ 
│1514110│[282808] │ 
├───────┼─────────┤ 
│1456009│[282808] │ 
├───────┼─────────┤ 
│146294 │[282808] │ 
├───────┼─────────┤ 
│29812 │[282808] │ 
├───────┼─────────┤ 
│889369 │[282808] │ 
├───────┼─────────┤ 
│221085 │[282808] │ 
├───────┼─────────┤ 
│1084085│[282808] │ 
├───────┼─────────┤ 
│17122 │[282808] │ 
├───────┼─────────┤ 
│79762 │[282808] │ 
├───────┼─────────┤ 
│887829 │[282808] │ 
├───────┼─────────┤ 
│375676 │[282808] │ 
├───────┼─────────┤ 
│1071899│[282808] │ 
├───────┼─────────┤ 
│1632753│[282808] │ 
├───────┼─────────┤ 
│1084085│[1748723]│ 
├───────┼─────────┤ 
│1071899│[1748723]│ 
├───────┼─────────┤ 
│710990 │[1748723]│ 
├───────┼─────────┤ 
│402609 │[269346] │ 
├───────┼─────────┤ 
│1711007│[269346] │ 
├───────┼─────────┤ 
│1408844│[269346] │ 
├───────┼─────────┤ 
│327082 │[269346] │ 
├───────┼─────────┤ 
│1575549│[269346] │ 
├───────┼─────────┤ 
│165601 │[269346] │ 
├───────┼─────────┤ 
│886370 │[269346] │ 
├───────┼─────────┤ 
│560737 │[269346] │ 
├───────┼─────────┤ 
│1084085│[269346] │ 
├───────┼─────────┤ 
│935787 │[269346] │ 
├───────┼─────────┤ 
│1448889│[269346] │ 
├───────┼─────────┤ 
│644901 │[269346] │ 
├───────┼─────────┤ 
│1415535│[269346] │ 
├───────┼─────────┤ 
│1713087│[269346] │ 
├───────┼─────────┤ 
│1084085│[122631] │ 
├───────┼─────────┤ 
│1384573│[122631] │ 
├───────┼─────────┤ 
│268383 │[1071899]│ 
├───────┼─────────┤ 
│1084085│[1071899]│ 
├───────┼─────────┤ 
│1748723│[1071899]│ 
├───────┼─────────┤ 
│282808 │[1071899]│ 
└───────┴─────────┘ 
+1

你可以发布样本数据集吗? –

+0

包含'RETURN c.primaryId,bAll'的示例响应。 – mike

+1

您完全不清楚您想要获得的结果。显示节点和关系的简短示例以及所需的结果。 –

回答

1

Aggregation功能,如COLLECT聚集在 “分组键”。在您的查询中,WITH a, b, COLLECT(b.primaryId) AS bAll, r1正在使用组合a,br1作为分组键,因此bAll聚合将始终只包含一个单一的primaryId值(来自同一组中的b节点)。

以下可能更接近你想要的。它针对每个节点a返回也是深度1节点的所有深度2节点的primaryId值。 (查询,使简单的假设,你的节点具有独特primaryId值)。

MATCH (a)--(b) 
WITH a, COLLECT(b) AS bs 
UNWIND bs AS b 
MATCH (b)--(c) 
WHERE c IN bs 
RETURN a, COLLECT(c.primaryId) AS cIds; 

[更新]

如果你也想返回所有r1关系,你可以这样做:

MATCH (a)-[r1]-(b) 
WITH a, COLLECT(r1) AS r1s, COLLECT(b) AS bs 
UNWIND bs AS b 
MATCH (b)--(c) 
WHERE c IN bs 
RETURN a, r1s, COLLECT(c.primaryId) AS cIds; 
+0

我明白了,这绝对是更正确的工作,我看到列表现在是更明智的东西。但是,假设我仍然希望在查询结束时返回'r1',如果我这样做,它告诉我'r1'不是从'WITH'子句开始定义的。 – mike

+0

查看我的更新回答。 – cybersam

+0

我也在我的答案中解决了一些问题。 – cybersam

相关问题