【问题标题】:Neo4j conditional intersection of optional matchings可选匹配的 Neo4j 条件交集
【发布时间】:2015-10-07 18:12:29
【问题描述】:
 MATCH (category:Category {id:'123'} ),
                     (stream:Stream {id:'567'} )
 OPTIONAL MATCH path=(stream)-[:CONTAINS]->(categories:Category)-[:CHILD_OF*0..50]->(category)-[:CHILD_OF*0..50]->(subcats2:Category)<-[:PHOTO_OF]-(photo)
 with stream, subcats2, photo
 OPTIONAL MATCH (stream)<-[:PARTICIPANT_OF]-(users:User)-[:OWNER]->(photo)-[:PHOTO_OF]->(subcats:Category
 return photo

我想要这样的查询;

如果流contains 类别做第一个可选

如果流(有)participants 用户执行第二个可选操作

如果两者都返回照片的交集

但是在上面的查询中;就像联合查询一样,如果流有参与者或用户,则返回 OK,但如果它同时具有类别和用户,则无法取交集。

需要类似的东西

MATCH (category:Category {id:'123'} ),
      (stream:Stream {id:'567'} )
MATCH (stream)-[:CONTAINS]->(categories:Category)
WITH count(categories) as cat_count
IF cat_count > 0
     MATCH path=(stream)-[:CONTAINS]->(categories:Category)-[:CHILD_OF*0..50]->(category)-[:CHILD_OF*0..50]->(subcats2:Category)<-[:PHOTO_OF]-(photo)
     with stream, subcats2, photo
MATCH (stream)-[:PARTICIPANT_OF]->(users:User)
WITH count(users) as user_count
IF user_count > 0
     MATCH (stream)<-[:PARTICIPANT_OF]-(users:User)-[:OWNER]->  (photo)-[:PHOTO_OF]->(subcats:Category
return photo

有什么想法吗?

【问题讨论】:

  • subcats 应该是 subcats2 吗?
  • 它们是不同的子猫,这不是重要的部分@cybersam
  • 我并不是要暗示这是最重要的事情 :-),但它确实会影响任何潜在的解决方案。

标签: graph neo4j cypher


【解决方案1】:

你可以做一个联合,第二部分也检查它是否不被使用:

MATCH (stream:Stream {id:'567'} )
WHERE size((stream)-[:CONTAINS]->()) > 0
MATCH (category:Category {id:'123'} )
MATCH path=(stream)-[:CONTAINS]->(categories:Category)-[:CHILD_OF*0..50]-(category)-[:CHILD_OF*0..50]->(subcats2:Category)<-[:PHOTO_OF]-(photo)
RETURN stream, subcats2 as category, photo

UNION 

MATCH (stream:Stream {id:'567'} )
WHERE size((stream)-[:CONTAINS]->()) = 0
MATCH (category:Category {id:'123'} )
MATCH (stream)<-[:PARTICIPANT_OF]-(users:User)-[:OWNER]->(photo)-[:PHOTO_OF]-(category)
return stream, category,photo

【讨论】:

  • 在这种情况下,如果第一个查询返回,它不会返回照片的交集,第二个查询应该使用从第一个查询返回的照片
  • 我需要在第二个查询中使用来自第一个查询的photo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多