Neo4J で次のクエリを実行していますが、エラーが発生します。簡単に言えば、データベースに「ユーザー」というラベルが付いたすべてのノードを表示するように求めています。関係がある場合は、関係のタイプと接続先のノードのラベル タイプを表示します。
START n=node(*) MATCH (n:user)-[r?]-(m) WHERE HAS (n.name) RETURN n, labels(n), type(r), labels(m), m.name;
関連するノードを持たないタイプ user のノードが見つかった場合、エラーが発生します。labels(m) の部分で膨らんでいるようです。ノードが存在しない場合は、エラーの代わりに NULL が返されると思います。これが type() 関数の仕組みです。関係が見つからない場合、type() は NULL を返します。
ラベル(m)部分を省略した場合の結果は次のようになります...
==>+-----------------------------------------------------------------------------------------------------------------------------------+
==> | n | labels(n) | type(r) | m.name |
==> +-----------------------------------------------------------------------------------------------------------------------------------+
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"} | ["user"] | "hasContext" | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"} | ["user"] | "hasContext" | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"} | ["user"] | "hasContext" | "vinniecontext" |
==> | Node[2558]{lastName:"b",mobilePhone:"b",status:"b",email:"b",name:"b",firstName:"b"} | ["user"] | <null> | <null> |
==> | Node[2559]{lastName:"c",mobilePhone:"c",status:"c",email:"c",name:"c",firstName:"c"} | ["user"] | <null> | <null> |
==> | Node[2560]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"} | ["user"] | <null> | <null> |
==> | Node[2561]{lastName:"b",mobilePhone:"b",status:"b",email:"b",name:"",firstName:"b"} | ["user"] | <null> | <null> |
==> +-----------------------------------------------------------------------------------------------------------------------------------+
希望する結果を得るにはどうすればよいですか? 基本的に、接続ノードがない場合は NULL 値が必要です。それ以外の場合は、接続ノードのラベルを教えてください。
前もって感謝します!!