No Neo4j, quando utilizo a seguinte consulta:
MATCH (p:Person)-[:ACTED_IN]->(m) WHERE 'Neo' IN r.roles RETURN p
então ele retorna apenas um nó Pessoa.
Mas quando eu mudo a consulta para:
MATCH (p:Person)-[:ACTED_IN]->(m) WHERE 'Neo' IN r.roles RETURN p.name
então ele retorna 3 linhas.
Isso é estranho para mim, pois espero que apenas uma linha seja retornada?
Seu MATCH encontrou 3 caminhos separados que correspondem ao padrão, porque há três nós :Movie separados onde uma pessoa atuou e incluiu 'Neo' nos papéis: cada um dos 3 filmes Matrix na trilogia (o gráfico de filmes foi criado antes do lançamento do 4º filme Matrix).
Keanu Reeves era o mesmo ator (e o mesmo nó :Person no gráfico) para todos os 3 caminhos correspondentes, com um :Movie diferente (e relacionamentos :ACTED_IN diferentes) para cada linha.
Se você fizesse isso,
RETURN p, r, m
veria três caminhos separados nos resultados visuais (todos conectados ao único nó Keanu Reeves) e três linhas separadas nos resultados tabulares.A presença do nó do filme e o relacionamento devem deixar mais claro que essas são 3 linhas separadas com um elemento em comum. As linhas não são desduplicadas automaticamente para resultados tabulares, mas para uma visualização gráfica de resultados, há apenas um nó Keanu Reeves para mostrar, e não nós separados.
Então você tem um número de linhas (3) dos 3 caminhos resultantes encontrados pelo padrão MATCH, mas se você quisesse uma única linha de resultados, você precisaria agregar ou obter linhas distintas. Para fazer isso, você poderia modificar a consulta para isto:
ou isto: