我正在使用 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
是吗?