Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
11-12-2020 01:14 AM
We have a Neo4J database that tracks people working for companies. The general structure is -
(Person)-[:WORKS_AT]->(Company)
A person can have multiple jobs at the same time and each company can have multiple people.
Given 2 companies (Company 1 and Company 2) we can calculate the shortest path using -
match (start:Company {id:1}),(end:Company {id:2}), p = shortestPath((start)-[:WORKS_AT*]-(end)) return *
What we want to do, is calculate the shortest path between the 2 companies where the path includes specific people, e.g. -
(Company 1)-(Person 1)-(Company 4)-(Person 2)-(Company 2)
would be returned instead of the following if we wanted to connect via Person 2 -
(Company 1)-(Person 3)-(Company 2)
11-12-2020 04:15 AM
It sounds like you already have easy one-hop data on what companies the people you're interested work for. So find the shortest path between the people, not the companies, and then just do a query for what companies those people work for. For example something like:
MATCH (p1:Person { name: "Joe" })-[:WORKS_AT]->(c1:Company)
MATCH (p2:Person { name: "Sarah"})-[:WORKS_AT]->(c2:Company)
MATCH p=shortestPath((p1)-[*]-(p2))
Your shortest path is now p + the one hop on either side that connects p1 to c1, and p2 to c2
All the sessions of the conference are now available online