Допустим, у нас есть User
узлы, Company
узлы, Project
узлы, School
узлы и Event
узлы. И есть следующие отношения между этими узлами
(User)-[:WORKED_AT {start: timestamp, end:timestamp}]->(Company)
(User)-[:COLLABORATED_ON]->(Project)
(Company)-[:COLLABORATED_ON]->(Project)
(User)-[:IS_ATTENDING]->(Event)
(User)-[:STUDIED_AT]->(School)
Я пытаюсь рекомендовать пользователей любому пользователю. Мой стартовый запрос выглядит так
MATCH p=(u:User {id: {leftId}})-[r:COLLABORATED_ON|:AUTHORED|:WORKED_AT|:IS_ATTENDING|:STUDIED_AT*1..3]-(pymk:User)
RETURN p
LIMIT 24
Теперь это возвращает мне всех pymk
пользователей в пределах от 1 до 3 отношений, и это нормально. Но я хочу отфильтровать путь по атрибутам отношений. Например, удалите следующий путь, если даты начала и окончания работы user
и pymk
не перекрываются.
(User)-[:WORKED_AT]->(Company)<-[:WORKED_AT]-(User)
Я могу сделать это одним запросом
MATCH (u:User)-[r1:WORKED_AT]->(Company)<-[r2:WORKED_AT]-(pymk:User)
WHERE
(r1.startedAt < r2.endedAt) AND (r2.startedAt < r1.endedAt)
RETURN pymk
Но я не мог заставить себя делать это в совокупности путей. Я даже не знаю, возможно ли это.
Любая помощь приветствуется.