neo4jcypherspring-data-neo4j

Test if relationship exists in neo4j / spring data


I'm trying to solve the simple question, if in a graph with the "knows" relationship, some person A knows some person B. Ideally I would answer this question with either true or false but I'm failing to solve this.

I found the following in another StackOverflow question which is almost what I want, except that apart from just answering my question, it also changes the graph:

MATCH  (p:Person {userId: {0}}), (b:Person {userId: {1}}) 
MERGE (p)-[r:KNOWS]->(b) 
ON CREATE SET r.alreadyExisted=false 
ON MATCH SET r.alreadyExisted=true 
RETURN r.alreadyExisted;

In the end I would like to put this in a Spring Neo4J repository like this

public interface PersonRepository extends GraphRepository<Person> {
    boolean knows(final Long me, final Long other);
}

That means if there is a way to do it without cypher - using Springs Query and Finder methods, that would be fine too.


Solution

  • The Cypher query for this is a simple one, the key here is the EXISTS() function, which will return a boolean value if the pattern given to the function exists in the graph.

    Here's the Cypher query.

    MATCH  (p:Person {userId: {0}}), (b:Person {userId: {1}}) 
    RETURN EXISTS( (p)-[:KNOWS]-(b) )
    

    You can even make it more concise:

    RETURN EXISTS( (:Person {userId: {0}})-[:KNOWS]-(:Person {userId: {1}}) )