以KOA-NEO4J或BOLT的forms传递一组属性和节点作为POST语句

我正在构build一个连接到NEO4J实例的REST API。 我使用koa-neo4j库作为基础( https://github.com/assister-ai/koa-neo4j-starter-kit )。 我是所有这些技术的初学者,但由于这个论坛的一些帮助,我有基本的function工作。 例如,下面的代码允许我创build一个标签为“metric”的新节点,并设置名称和dateAdded属性。

url:

/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 

但是,我正在努力想知道如何处理更复杂的例子。 如果事先不知道在创build新节点时要添加多less属性,或者想要在单个后置语句中创build多个节点,我该如何处理情况。 理想情况下,我希望能够传递类似JSON的东西作为POST的一部分,它将包含我想要创build的所有节点,标签和属性。 是这样的可能吗? 我尝试使用下面的Cypher查询并在POST正文中传递JSONstring,但它不起作用。

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

我可以更好地切换到Neo4j Rest API,而不是使用BOLT协议和KOA-NEO4J框架。 从我的研究中,我认为最好使用BOLT,但是我希望Rest API作为我的前后端之间的中间层,所以如果长远来说更容易,我愿意改变。

谢谢您的帮助!

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

  1. UNWIND只接受一个集合作为它的参数,而不是一个string。
  2. SET n = properties只有properties是地图而不是string时, SET n = properties才是合法的。

这个查询应该可以用来创build一个节点(假设$props是一个映射,它包含了所有要用新创build的节点存储的属性):

 CREATE (n:metric $props) RETURN n 

如果你想创build多个节点,那么这个查询(基本上和你的一样)应该可以工作(但是只有当$prop_collection是一个映射集合时 ):

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

当我尝试将复杂types作为parameter passing给neo4j时,我也遇到了困难,这与js和cypher之间的types转换有关,除了在官方的neo4j JavaScript驱动程序库中提交问题之外没有太多的工作可做。 koa-neo4j使用引擎盖下的官方驱动程序。

koa-neo4j这种场景的一种方法是在发送给Cypher之前使用JavaScript来处理这些参数:

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

还可以使用postProcess生命周期钩子来进一步处理Cypher查询的结果:

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