2017-06-27 7 views
1

私は、OPTIONAL MATCH句を使用して、従業員からすべての(通信がない場合は0またはゼロのいずれか)に送信されたメッセージ数を含む配列を生成しようとしていますが、機能しません。私は、通信がないときに配列の中でゼロを取得していません。私は、次のクエリを使用しています:ここでNeo4jオプションの一致

MATCH(e:Employee{key:101,div:'finance'}),(b:Employee) 
OPTIONAL MATCH (e)-[r:Message]->(b) 
WITH e.name as em, r.NUMBER_OF_MESSAGES as msg 
ORDER BY msg DESC 
RETURN em, COLLECT(msg) AS row 

が出力されます:私はここで何が問題を

Row: [31,20,12,10,8,7,7,2,2,2,2,1,1,1] 

をやっていますか?前もって感謝します。ここ

答えて

2

問題はcollect()がヌルを無視して、すべての値を収集することです。 2つのノード間で通信がない場合、msgの値はnullとなり、結果的には無視されます(COLLECT())。それがあなたのクエリを変更する修正するには:

MATCH(e:Employee{key:101,div:'finance'}),(b:Employee) 
OPTIONAL MATCH (e)-[r:Message]->(b) 
WITH e.name as em, coalesce(r.NUMBER_OF_MESSAGES,0) as msg 
ORDER BY msg DESC 
RETURN em, COLLECT(msg) AS row 

このクエリは、coalesce()関数を使用します。この関数は、渡された引数のリストの最初のnull以外の値を返します。次に、r.NUMBER_OF_MESSAGESnullの場合、ゼロに置き換えられます。

+0

です。それは素晴らしい仕事です。ありがとう、ブルーノ.. !! – Ram

関連する問題