簡體   English   中英

如何將關系數據設置為節點上的屬性?

[英]How do I set relationship data as properties on a node?

我已經從SQL躍升為Neo4j。 作為構建推薦引擎的第一步,我需要將一些復雜的關系設置為節點上的屬性。

該Cypher查詢返回類別和權重的列表。

MATCH (m:Movie {name: "The Matrix"})<-[:TAKEN_FROM]-(i:Image)-[r:CLASSIFIED_AS]->(c:Category) RETURN c.name, avg(r.weight)

這返回

{ "fighting": 0.334, "looking moody": 0.250, "lying down": 0.237 }

如何在父節點上將這些結果設置為鍵值對?

理想的結果是這樣的:

(m:Movie { "name": "The Matrix", "fighting": 0.334, "looking moody": 0.250, "lying down": 0.237 })

另外,我假設我應該分批處理(m:Movie)節點,那么完成此操作的最佳方法是什么?

不太確定如何獲得該輸出,該返回值不應將它們都作為鍵值對返回。 相反,我期望這樣的東西: {"c.name":"fighting", "avg(r.weight)":0.334} ,每對都有單獨的記錄。

為此,您可能需要APOC程序 ,因為您需要一種方法來將屬性鍵設置為類別名稱的值。 這有點棘手,但是您可以通過從收集的對中創建一個映射,然后將SET與+ =一起使用來更新相關屬性,以實現此目的:

MATCH (m:Movie {name: "The Matrix"})<-[:TAKEN_FROM]-(:Image)-[r:CLASSIFIED_AS]->(c:Category) 
WITH m, c.name as name, avg(r.weight) as weight
WITH m, collect([name, weight]) as category
WITH m, apoc.map.fromPairs(category) as categories
SET m += categories

就批處理而言,請看一下apoc.periodic.iterate() ,它將允許您迭代外部查詢的流式結果並對流的批次執行內部查詢:

CALL apoc.periodic.iterate(
 "MATCH (m:Movie)
 RETURN m",
 "MATCH (m)<-[:TAKEN_FROM]-(:Image)-[r:CLASSIFIED_AS]->(c:Category) 
  WITH m, c.name as name, avg(r.weight) as weight
  WITH m, collect([name, weight]) as category
  WITH m, apoc.map.fromPairs(category) as categories
  SET m += categories",
{iterateList:true, parallel:false}) YIELD total, batches, errorMessages
RETURN total, batches, errorMessages

暫無
暫無

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

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