簡體   English   中英

Neo4j查詢-查找滿足屬性條件並具有關系的所有節點

[英]Neo4j Query - Find all nodes which satisfy a property condition and have relationship

我有一個成功運行的查詢:

match (n:A {tag_no:"N2203"})<-[:rel_a]-(v:B)-[:rel_b]->(r)<-[:rel_c]-(n) WHERE (v.invoice_date>="2012-08-01" AND v.invoice_date<"2016-02-01") with v, collect(r) as rs where all (x in rs where x.date<"2016-08-01") return count(v) as count;

我需要進一步過濾此查詢。

我需要r nodes with max(r.date) for each v關聯r nodes with max(r.date) for each v ,並找出其中有多少個節點與另一個D類型的節點有關系

我正在嘗試此查詢,它引發語法錯誤

match (n:A {tag_no:"N2203"})<-[:rel_a]-(v:B)-[:rel_b]->(r)<-[:rel_c]-(n) WHERE (v.invoice_date>="2012-08-01" AND v.invoice_date<"2016-02-01") with v, max(r.date) as date collect(r) as rs where (all (x in rs where x.date<"2016-08-01") AND filter(x in rs where x.date=date)[0]<-[:rel_c]-(d:D)) return count(v) as count;

我還嘗試了許多其他組合,但是都拋出了一些語法錯誤。 感謝所有幫助。

主要問題是查詢解析器現在無法確定filter(x in rs where x.date=date)[0]確實是一個節點,因此語法中不允許這樣做。 幸運的是,有可能以一些冗長的代價解決此問題:

  • 使用另一個WITH子句為節點變量引入別名( n )。 這將允許您使用WHERE <pattern>語法。
  • 同樣,您不能在WHERE子句中引入新變量,因此只需使用(:D)而不是(d:D)

因此查詢將如下所示(顯然,我尚未對其進行測試):

MATCH (n:A {tag_no:"N2203"})<-[:rel_a]-(v:B)-[:rel_b]->(r)<-[:rel_c]-(n)
WHERE v.invoice_date>="2012-08-01"
  AND v.invoice_date<"2016-02-01"
WITH
  v,
  max(r.date) AS date,
  collect(r) AS rs
WHERE all(x IN rs WHERE x.date<"2016-08-01")
WITH filter(x in rs where x.date=date)[0] AS n, v
WHERE (n)<-[:rel_c]-(:D)
RETURN count(v) AS count;

暫無
暫無

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

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