簡體   English   中英

neo4j cypher:從查詢結果“堆疊”節點

[英]neo4j cypher: “stacking” nodes from query result

考慮數據庫中通過模式連接的三種類型的節點的存在

(a)-[ra {qty}]->(b)-[rb {qty}]->(c)

用戶可以在自己的願望清單中包含其中的一些內容。

考慮到當用戶擁有(a)時,結果中關聯的(b)(c)也應為:查詢數據庫以返回其願望清單上所有節點的列表的最佳方法是什么?在將各自的ra.qtyrb.qty某些字段(例如b.pricec.price )相乘后返回?

注意:你可以找到同樣的問題,而不需要通過可變長度這里

假設您有用戶連接到他們想要的東西,如下所示:

(user:User)-[:WANTS]->(part:Part)

就像您描述的那樣,這些部分在特定數量上依賴於其他部分:

CREATE 
  (a:Part) -[:CONTAINS {qty:2}]->(b:Part),
  (a:Part) -[:CONTAINS {qty:3}]->(c:Part),
  (b:Part) -[:CONTAINS {qty:2}]->(c:Part)

然后,您可以找到所有零件,以及每個零件需要多少個零件,如下所示:

MATCH 
    (user:User {name:"Steven"})-[:WANTS]->(part),
    chain=(part)-[:CONTAINS*1..4]->(subcomponent:Part) 
RETURN subcomponent, sum( reduce( total=1, r IN relationships(chain) | total * r.rty) )

1..4項表示要在樹上的1-4個子組件之間看。 你可以看。 將其設置為任意值,包括“ 1 ..”,無限深度。

第二項有點復雜。 它有助於嘗試不加總和的查詢,以查看其作用。 否則,reduce將使依賴的每個“鏈”的所需部分相乘。 然后,將總和相加將按子組件匯總結果(從RETURN子句推斷得出),並對該子組件的總計數求和。

然后弄清楚價格就是將每個零件的總數量相乘的練習。 我將其留給讀者練習;)

您可以通過在http://console.neo4j.org/在線控制台中運行查詢來進行嘗試。

暫無
暫無

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

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