0

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 値が必要です。それ以外の場合は、接続ノードのラベルを教えてください。

前もって感謝します!!

4

1 に答える 1

2

OK、同僚がこの問題を解決するのを手伝ってくれました (1 日半、頭を机にぶつけた後)。UNION ALL を使用して、必要な結果を得ました。2 つの異なるクエリを実行する必要があります。1 つは関係が null で、もう 1 つは関係が null でない場合です。

START n=node(*) MATCH (n:user)-[r?]-(m) WHERE r IS NOT NULL RETURN n, labels(n), type(r), labels(m) as i, m.name as a 
UNION ALL
START n=node(*) MATCH (n:user)-[r?]-(m) WHERE r IS NULL RETURN n, labels(n), type(r), null as i, null as a;

で、結果は・・・

==> +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
==> | n                                                                                                                                               | labels(n) | type(r)      | i           | a               |
==> +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2557]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | "hasContext" | ["context"] | "vinniecontext" |
==> | Node[2558]{lastName:"b",mobilePhone:"b",status:"b",email:"b",name:"b",firstName:"b"}                                                            | ["user"]  | <null>       | <null>      | <null>          |
==> | Node[2559]{lastName:"c",mobilePhone:"c",status:"c",email:"c",name:"c",firstName:"c"}                                                            | ["user"]  | <null>       | <null>      | <null>          |
==> | Node[2560]{lastName:"a",mobilePhone:"a",status:"a",email:"a",name:"a",firstName:"a"}                                                            | ["user"]  | <null>       | <null>      | <null>          |
==> | Node[2561]{lastName:"b",mobilePhone:"b",status:"b",email:"b",name:"",firstName:"b"}                                                             | ["user"]  | <null>       | <null>      | <null>          |
==> | Node[7638]{lastName:"afdasdfasdf",mobilePhone:"asdfa",status:"asdfasdf",email:"asdfasdfasdf",name:"asdfasdfa",firstName:"asdfasdfas"}           | ["user"]  | <null>       | <null>      | <null>          |
==> | Node[7639]{lastName:"asddsafsda",mobilePhone:"asdfasdfdsa",status:"sadfsadfsda",email:"sadfasdfas",name:"sdafasdfsadf",firstName:"sadfsadfsad"} | ["user"]  | <null>       | <null>      | <null>          |
==> +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 

この解決策が他の誰かの苦痛を和らげることを願っています。

于 2013-07-24T15:04:15.457 に答える