2014-10-05 77 views
1

有一定的关系我有这个疑问:返回节点是否在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,否则空间不起作用。

你能帮我用返回这个布尔值的最佳方式吗?

+0

我可能会把它转过来,首先去用户的收藏夹,然后添加电影和商店之间的可选匹配。 – 2014-10-05 23:43:52

+0

我觉得我使用“START MATCH商店与商店”做了它;然后在同一个查询中“MATCH faves and RETURN”。我不知道为什么在这种情况下,它不像一个外部联接 – 2014-10-06 07:11:08

回答

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 
+0

谢谢,但实际上,我想要的是附近商店中的电影列表,以及他们中的每一个的布尔值,表示是否是喜欢或不喜欢:) – 2014-10-06 07:48:16

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 

如果你看到你不希望的结果,可以确认查询的行为不具有可选的匹配组件,也许你的位置搜索将返回比你更期望?