2016-03-18 27 views
1

Ben şuna benzer bir veri kümesi vardır: (dahilKoleksiyonda max() nasıl kullanılır?

CREATE (n {name:'main', val:3}) -[:r]-> ({name:'sub1', val:2}), (n)-[:r]->({name:'sub2', val:1}) 

Şimdi, 'ana' adlı düğüme bağlı olan tüm düğümler için 'val' için maksimum değeri bulmalıyız 'ana' çok). Yani, bu durumda cevap 'Ana' adlı düğüm herhangi subnodes olmayabilir yana 3.

, ben o zaman, subnodes bulduğunuz tüm vals birleştirmek bir liste halinde bulunan ve üzerinde max() çağırmak için OPTIONAL MATCH kullanılan Bunu şöyle:

MATCH (n {name:'main'}) 
OPTIONAL MATCH (n)-[:r]->(subs) 
RETURN max(n.val + collect(subs.val)) 

Ama bu şu hatayı veriyor:

Type mismatch: expected Float or Integer but was Collection (line 3, column 18 (offset: 73)) "RETURN max(n.val + collect(subs.val))"

Bu tür sorunlardan çözmek için doğru mayıs nedir?

cevap

2

Bu sizin için çalışması gerekir:

MATCH p=(n {name:'main'})-[:r*0..]->(subs) 
UNWIND NODES(p) AS node 
RETURN MAX(node.val) AS result; 

Bu sorgu r ilişkilerin tüm (opsiyonel) zincirini takip etmek variable-length pattern kullanır. Sorgunuz yoktu. NODES() işlevi, bir yol düğümleri koleksiyonu üretir ve UNWIND koleksiyonu veri satırlarına dönüştürür. MAX() gibi toplama işlevleri yalnızca veri satırlarında toplanır.