簡體   English   中英

Neo4J Cypher查詢-空關系

[英]Neo4J Cypher query - Null relationship

我對Neo4J相當陌生,並且在Cypher查詢中遇到問題。

我通過Neo4J Java編寫密碼查詢,我的Neo4J數據庫的設計如下:

我有一個具有諸如ID,名稱,年齡,電子郵件,性別和節點城市之類的屬性的用戶節點。 每個用戶通過一種關系(生命)與一個城市節點(具有屬性id,name)相關聯。 但是,可能會出現用戶未與城市關聯的情況。

現在,我的查詢場景是,我想在一個查詢中獲取用戶及其居住城市的所有詳細信息。

 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;

當用戶與城市相關時,該查詢工作良好,但如果用戶未與城市相關聯,則查詢失敗。

您能否通過查詢處理兩種情況來幫助我。

  1. 您的MATCHWHERE子句實際上要求所有匹配的p必須與城市關聯。 您必須使用OPTIONAL MATCH子句進行可選匹配。
  2. 順便說一下,“ MATCH p,c,p-[:lives]-> c”中的“ p,c”是不必要的且效率低下的。

要獲得所需的結果,請嘗試以下操作(如果沒有關聯的城市,則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;

另外,我強烈建議在pc節點上使用標簽PersonCity (而不是type屬性)。 這將使您的查詢更加高效和清晰。 如果您對節點進行了更改,則更快的查詢如下所示:

MATCH (p:Person {id: 12345})
OPTIONAL MATCH (p)-[:lives]->(c:City)
RETURN p.name, p.age, p.email, p.gender, c.name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM