[英]neo4j cypher: “stacking” nodes from query result
考慮數據庫中通過模式連接的三種類型的節點的存在
(a)-[ra {qty}]->(b)-[rb {qty}]->(c)
用戶可以在自己的願望清單中包含其中的一些內容。
考慮到當用戶擁有(a)
時,結果中關聯的(b)
和(c)
也應為:查詢數據庫以返回其願望清單上所有節點的列表的最佳方法是什么?在將各自的ra.qty
和rb.qty
某些字段(例如b.price
和c.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.