返回Node是否在Neo4j中具有某种关系

时间:2014-10-05 18:52:34

标签: neo4j cypher spatial

我有这个问题:

START store=node:LocationIndex('withinDistance:[40.0,20.30,11.0]'), u=node(111) 
MATCH store-[:rents]->(m:Movie)
OPTIONAL MATCH u-[r:isFav]-m
RETURN DISTINCT store, m

如果节点mu通过:isFav关系相关,我会尝试返回true。 我的第一种方法是使用OPTIONAL MATCH,但它类似于OUTER JOIN,返回数据库中的所有电影,即使它们不在商店中。

我知道在Neo4j 2.1.5中有一个EXIST功能完全适合这个但我使用2.1.2因为否则Spatial不起作用。

你能帮我解决一下这个布尔值的最佳方法吗?

2 个答案:

答案 0 :(得分:0)

此查询将返回isStoreNearby布尔值。为了提高效率,只要找到一个附近的商店出租用户最喜欢的电影,它就会停止查询。

START store=node:LocationIndex('withinDistance:[40.0,20.30,11.0]'), u=node(111) 
MATCH store-[:rents]->(m:Movie)-[r:isFav]-u
RETURN COUNT(m) > 0 AS isStoreNearby
LIMIT 1

答案 1 :(得分:0)

您的查询可以很好地实现您对Cyber​​sam的答案的评论。您需要添加的是布尔字段:

START store=node:LocationIndex('withinDistance:[40.0,20.30,11.0]'), u=node(111) 
MATCH store-[:rents]->(m:Movie)
OPTIONAL MATCH u-[r:isFav]-m
RETURN store, m, COUNT(r) > 0 AS fav

如果您看到了您不期望的结果,您是否可以确认查询在没有可选匹配组件的情况下的行为,或许您的位置搜索返回的次数超出预期?