返回节点是否在Neo4j的
问题描述:
有一定的关系我有这个疑问:返回节点是否在Neo4j的
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
通过:isFav
关系与u
相关返回true。 我的第一种方法是使用OPTIONAL MATCH,但它与OUTER JOIN类似,即使它们不在商店中,也会返回数据库中的所有影片。
我知道在Neo4j 2.1.5有一个EXIST函数完全符合这个,但我使用2.1.2,否则空间不起作用。
你能帮我用返回这个布尔值的最佳方式吗?
答
该查询将返回一个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
+0
谢谢,但实际上,我想要的是附近商店中的电影列表,以及他们中的每一个的布尔值,表示是否是喜欢或不喜欢:) – 2014-10-06 07:48:16
答
你的查询看起来很好,以实现你对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
如果你看到你不希望的结果,可以确认查询的行为不具有可选的匹配组件,也许你的位置搜索将返回比你更期望?
我可能会把它转过来,首先去用户的收藏夹,然后添加电影和商店之间的可选匹配。 – 2014-10-05 23:43:52
我觉得我使用“START MATCH商店与商店”做了它;然后在同一个查询中“MATCH faves and RETURN”。我不知道为什么在这种情况下,它不像一个外部联接 – 2014-10-06 07:11:08