我有这个问题:
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
如果节点m
与u
通过:isFav
关系相关,我会尝试返回true。
我的第一种方法是使用OPTIONAL MATCH,但它类似于OUTER JOIN,返回数据库中的所有电影,即使它们不在商店中。
我知道在Neo4j 2.1.5中有一个EXIST功能完全适合这个但我使用2.1.2因为否则Spatial不起作用。
你能帮我解决一下这个布尔值的最佳方法吗?
答案 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)
您的查询可以很好地实现您对Cybersam的答案的评论。您需要添加的是布尔字段:
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
如果您看到了您不期望的结果,您是否可以确认查询在没有可选匹配组件的情况下的行为,或许您的位置搜索返回的次数超出预期?