2017-02-21 21 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

相关问题