2017-02-21 26 views
2

我正在構建一個連接到NEO4J實例的REST API。我使用koa-neo4j庫作爲基礎(https://github.com/assister-ai/koa-neo4j-starter-kit)。我是所有這些技術的初學者,但感謝來自這個論壇的一些幫助,我的基本功能工作。例如,下面的代碼允許我創建一個標籤爲「metric」的新節點,並設置名稱和dateAdded屬性。將一組屬性和節點作爲POST語句傳遞給KOA-NEO4J或BOLT

網址:

/metric?metricName=Test&dateAdded=2/21/2017 

index.js

app.defineAPI({ 
    method: 'POST', 
    route: '/api/v1/imm/metric', 
    cypherQueryFile: './src/api/v1/imm/metric/createMetric.cyp' 
}); 

createMetric.cyp」

CREATE (n:metric { 
    name: $metricName, 
    dateAdded: $dateAdded 
}) 
return ID(n) as id 

不過,我struggl瞭解我如何處理更復雜的例子。如果我不知道在預先創建新節點時要添加多少屬性,或者希望在單個後置語句中創建多個節點,我該如何處理情況。理想情況下,我希望能夠傳遞類似JSON的東西作爲POST的一部分,它將包含我想要創建的所有節點,標籤和屬性。是這樣的可能嗎?我嘗試使用下面的Cypher查詢並在POST正文中傳遞一個JSON字符串,但它不起作用。

UNWIND $props AS properties 
CREATE (n:metric) 
SET n = properties 
RETURN n 

我會更好切換tothe Neo4j的REST API,而不是螺栓協議和KOA-Neo4j的框架。從我的研究中,我認爲最好使用BOLT,但我希望Rest API作爲我的前後端之間的中間層,所以如果長遠來說這會更容易,我願意改變。

感謝您的幫助!

回答

3

您的Cypher語法在很多方面都不好用。

  1. UNWIND只接受集合作爲它的參數,而不是字符串。
  2. SET n = properties僅在properties是地圖而不是字符串時才合法。

此查詢應該創建一個單一的節點(假設$props是包含了所有你要與新創建的節點存儲性能參數圖)工作:

CREATE (n:metric $props) 
RETURN n 

如果你想創建多個節點,那麼這個查詢(本質上是一樣的你)應該工作(但只有當$prop_collection收集地圖):

UNWIND $prop_collection AS props 
CREATE (n:metric) 
SET n = props 
RETURN n 
+0

感謝您的輸入。我嘗試了你的代碼並且傳遞了下面的「props = [{metricName:」Test Name「,dateCreated:」02/21/2017「}]」但是我得到錯誤「爲節點創建提供的參數不是一個Map。很顯然,我沒有正確地構建「地圖」 - 對此有何指點? – n4nite

+1

@ n4nite您的道具參數必須是地圖,並且您要在查詢中使用的值應該是該地圖中其值爲地圖集合的條目。如果我們使用cybersam的示例,要使用'$ prop_collection'參數,您的道具必須是:'props = {prop_collection:[{metricName:「Test Name」,dateCreated:「02/21/2017」}] }' – InverseFalcon

+0

有什麼地方可以在Neo4j的地圖上閱讀,因爲我無法使用這個工具,並且在搜索Google時找不到太多內容?我正在使用這些示例,並將「props」字符串作爲我的POST語句的一部分傳遞給API,但我仍然收到一個錯誤消息,「爲節點創建提供的參數不是Map」。 – n4nite

1

我試圖通過複雜類型作爲參數的Neo4j,這與超過boltjscypher之間的類型轉換做的,沒有太多的人,除了在官方neo4j JavaScript driver回購申請的問題可以這樣做時也面臨困難。 koa-neo4j使用引擎蓋下的官方驅動程序。

一種方式去了解這樣的場景在koa-neo4j是使用JavaScript發送到Cypher支架之前,操作參數:

https://github.com/assister-ai/koa-neo4j#preprocess-lifecycle

也有可能進一步處理使用後處理生命週期鉤的Cypher查詢的結果:

https://github.com/assister-ai/koa-neo4j#postprocess-lifecycle

+0

嗨Keyvan。感謝您的評論和偉大的Koa-Neo4j框架。我對Node,Koa和Neo4j都是新手,所以這個框架已經成爲啓動和運行的絕佳方式。一旦我掌握了更多的編程技巧,我希望能爲框架做出貢獻! – n4nite

+0

Cheers @ n4nite,我會非常樂意幫助解決可能出現的任何框架相關問題,只要[提交GitHub問題](https://github.com/assister-ai/koa-neo4j/issues)if你遇到過一個。我很高興看到你用'koa-neo4j'做了很酷的事情。 – Keyvan

相關問題