2013-06-14 4 views
2

nouveau pour Neo4j.Neo4j 2.0 - résultats de la relation de sommation à partir de la requête chiffrée

J'ai des noeuds connectés par des relations qui ont une propriété "weight" avec un nombre. J'essaye d'obtenir une moyenne des propriétés de poids pour toutes les relations retournées dans la requête.

Voici la requête que je suis en train:

MATCH (x)-[r*1..6]-prod:Product 
WHERE x.name = 'ddbrown::default' 
RETURN sum(r.weight); 

Je reçois l'exception suivante

CypherTypeException: Expected `r` to be a Map but it was a Collection<relationship> 

Je suis évidemment mal interpréter ce qui se retourne comme r, mais je ne suis pas sûr de savoir comment pour obtenir un pointeur nommé à chaque relation.

Merci pour toute aide! Dean

Répondre

5

La somme peut être utilisée pour agréger plusieurs valeurs de retour correspondantes. Ce que vous devez faire est de calculer une valeur sur plusieurs parties des chemins r appariés. Pour calculer les valeurs sur les collections que vous pouvez utiliser reduce

match x -[r*1..6]-prod:Product 
WHERE x.name = 'ddbrown::default' 
return x, reduce(acc=0, n in r: acc + n.weight)/length(r) 

Sur une tangente différente, vous êtes correspondant à tous les types possibles de relations et les relations dans les deux sens dans votre requête. Vous voudrez peut-être limiter cela aux types de relations spéciales et dirigées.

+0

Thomas, merci pour la réponse. Je l'ai couru et ça fonctionne. En ce qui concerne la direction, vous avez raison, je devrais être directionnel. Je n'ai pas encore ajouté les liens bidirectionnels appropriés à mon graphique de test. Merci encore. doyen –

Questions connexes