私はNeo4Jにかなり慣れておらず、Cypherクエリに問題があります。
私はNeo4Jjavaを介して暗号クエリを記述し、Neo4Jデータベースは次のように設計されています。
id、name、age、email、gender、nodecityなどの属性を持つユーザーノードがあります。すべてのユーザーは、関係(ライブ)によって都市ノード(属性ID、名前)に関連付けられます。ただし、ユーザーが都市に関連付けられていない場合があります。
これで、クエリのシナリオは、ユーザーとユーザーが住んでいる都市のすべての詳細を1つのクエリで取得したいというものです。
match p, c, p-[:lives]->c where p.type = 'com.Person' and c.type='com.City' and p.id = 12345 return p.name, p.age, p.email, p.gender, c.name;
ユーザーが都市に関連付けられている場合、クエリは適切に機能しますが、ユーザーが都市に関連付けられていない場合は失敗します。
両方のシナリオを処理できるクエリを手伝っていただけませんか。
MATCH
andWHERE
句は、実際には、一致するすべてのものがp
都市に関連付けられている必要があることを要求しています。OPTIONAL MATCH
オプションの一致にはこの句を使用する必要があります。希望する結果を得るには、次のc.name
ことを試してください(null
関連する都市がない場合になります)。
MATCH (p {type: "Person", id: 12345})
OPTIONAL MATCH (p)-[:lives]->(c {type: "City"})
RETURN p.name, p.age, p.email, p.gender, c.name;
また、私は強く標識の使用をお勧めしますPerson
し、City
あなたのためにp
とc
(代わりのノードtype
プロパティ)。これにより、クエリがはるかに効率的かつ明確になります。ノードにこの変更を加えた場合、より高速なクエリは次のようになります。
MATCH (p:Person {id: 12345})
OPTIONAL MATCH (p)-[:lives]->(c:City)
RETURN p.name, p.age, p.email, p.gender, c.name;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加