我在Neo4j上学习Cypher,并且在理解如何在Cypher中执行高效'连接'等效操作时遇到问题。Cypher在'join'返回指数计数结果
我正在使用标准的矩阵字符示例,并且我已经添加了一些名为'Gun'的混合节点,其关系为':GIVEN_TO'。您可以在控制台上看见我的查询结果的位置:
http://console.neo4j.org/r/rog2hv
我使用的查询是:
MATCH (Neo:Crew { name: 'Neo' })-[:KNOWS*..]->(other:Crew),(other)<-[:GIVEN_TO]-(g:Gun),(Neo)<-[:GIVEN_TO]-(g2:Gun) RETURN count(g2);
我已经给新4枪,但是当我执行上面的我得到'12'。这似乎是这种情况,因为有3个“其他”和3 * 4 = 12。所以我得到了一些指数结果。
我的查询应该如何从示例中获得正确的计数('4')?
编辑: 我不直接按照@ceej的建议直接查询枪炮的原因是因为在我的真实使用案例中,我必须如上所述进行遍历。添加DISTINCT
不会为我的结果做任何事情。
谢谢,已经接近我的实际使用案例,我认为这应该是更好的。现在我剩下的问题是,我将如何获得所有知道Neo深度的机组成员的实际枪支节点?所以那些认识Neo等人的人[':KNOWS * ..]'和:还可能包括那些船员节点? – Mosselman
我设法在这里得到结果:http://console.neo4j.org/r/25or9h但它似乎不是实现这一目标的最佳方式。有什么想法吗? – Mosselman
是的,还有更好的方法。我用另一个查询返回了答案,该查询返回了知道Neo的船员枪支。 –