我正在使用Neo4j Spatial插件。
我们假设这个基本查询:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
RETURN c
它将返回34公里范围内的所有车辆。
如果我只想检索种族汽车(使用标签),该怎么办?
没有空间我会这样做:
MATCH (c:Race)
RETURN c
现在如果我想要 34公里范围内的所有赛车,我会:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (c:Race)
RETURN c
=> Cannot add labels or properties on a node which is already bound
。
实际上,c
已经绑定在第一行。
我不想这样做:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (cr:Race)
WHERE cr.id = c.id
RETURN cr
它会强制我打开所有节点,检查是否等于... =>糟糕的性能,尤其是当查询变得更复杂时(即使id被索引)。
什么是有效的解决方案?
更新-------------------
也许只比较节点更有效:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
MATCH (cr:Race)
WHERE cr = c
RETURN cr
是吗?
答案 0 :(得分:3)
怎么样:
START c = node:carslocation('withinDistance:[2.3725963,48.892067, 34.0]')
WHERE 'Race' in labels(c)
RETURN c
您基本上查找给定区域内的所有节点,然后在其标签包含Race
时对其进行过滤。