我正在使用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;
如何将这两个查询合并为一个查询?
答案 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