在其他条件下使用Neo4J Spatial Cypher查询

时间:2013-08-11 13:30:37

标签: neo4j neo4j-spatial

我正在使用Neo4J Spatial cypher查询来查找半径为25KM的用户,其中找到与我有相同家乡的用户。我使用了以下查询:

START u=node(5),node=node:geom('withinDistance:[17.3,78.3,25.0]') MATCH (u)-[:hometown]->()<-[:hometown]-(o) RETURN o;

此查询无法按我的意图运行。它标识给定半径中的所有用户节点,并为每个节点执行相同的MATCH查询,该查询特定于具有节点ID 5的用户。

将此问题分为两部分,这就是我想要结合的内容。 第一部分,确定半径25公里范围内的所有用户:

START node=node:geom('withinDistance:[17.3,78.3,25.0]') RETURN node;    

第二部分,确定与我有相同家乡的所有用户:

START u=node(5) MATCH (u)-[:hometown]->()<-[:hometown]-(o) RETURN o;

如何将这两个查询合并为一个查询?

1 个答案:

答案 0 :(得分:2)

所以,如果我理解正确,'node'包含给定半径内的所有家乡?在这种情况下,以下会做你想做的事情吗?

START u=node(5),town=node:geom('withinDistance:[17.3,78.3,25.0]') 
MATCH town<-[:hometown]-o

WITH u, o
MATCH (u)-[:hometown]->()<-[:hometown]-(o) 
RETURN o

我看到彼得已在邮件列表上回答。所以实际上我的假设是错误的,'node'代表用户,这意味着这就是答案:

START u=node(5),o=node:geom('withinDistance:[17.3,78.3,25.0]') 
MATCH (u)-[:hometown]->()<-[:hometown]-(o) 
RETURN o