Graph Neo4j可选匹配的条件交集

Graph Neo4j可选匹配的条件交集,graph,neo4j,cypher,Graph,Neo4j,Cypher,有什么想法吗?你可以做一个联合,第二部分也会检查它是否不被使用: 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

有什么想法吗?

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

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
MATCH(流:流{id:'567'})
其中大小((流)-[:包含]->())>0
匹配(类别:类别{id:'123'})
匹配路径=(流)-[:包含]->(类别:类别)-[:子目录*0..50]-(类别)-[:子目录*0..50]->(子目录2:类别)()=0
匹配(类别:类别{id:'123'})
匹配(流)(照片)-[:照片]-(类别)
返回流、类别、照片

您可以进行联合,其中第二部分还检查是否不使用:

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
MATCH(流:流{id:'567'})
其中大小((流)-[:包含]->())>0
匹配(类别:类别{id:'123'})
匹配路径=(流)-[:包含]->(类别:类别)-[:子目录*0..50]-(类别)-[:子目录*0..50]->(子目录2:类别)()=0
匹配(类别:类别{id:'123'})
匹配(流)(照片)-[:照片]-(类别)
返回流、类别、照片

在这种情况下,如果第一次查询返回,则不会返回交叉点照片集;如果第一次查询返回,则第二次查询应使用第一次查询返回的照片;如果第一次查询返回,则需要使用第一次查询返回的照片集,第二个查询应该使用第一个查询返回的照片我需要使用第二个查询中第一个查询返回的
照片
子类别
应该是
子类别2
?它们是不同的子类别,这不是重要的部分@cybersamI没有试图暗示这是最重要的事情:-),但它确实会影响任何潜在的解决方案。
subcats
是否应该是
subcats2
?它们是不同的子类,这不是@cybersamI试图暗示这是最重要的事情的重要部分:-),但它确实会影响任何潜在的解决方案。
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