我正在构建一个连接到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作为我的前后端之间的中间层,所以如果长远来说这会更容易,我愿意改变。
感谢您的帮助!
感谢您的输入。我尝试了你的代码并且传递了下面的“props = [{metricName:”Test Name“,dateCreated:”02/21/2017“}]”但是我得到错误“为节点创建提供的参数不是一个Map。很显然,我没有正确地构建“地图” - 对此有何指点? – n4nite
@ n4nite您的道具参数必须是地图,并且您要在查询中使用的值应该是该地图中其值为地图集合的条目。如果我们使用cybersam的示例,要使用'$ prop_collection'参数,您的道具必须是:'props = {prop_collection:[{metricName:“Test Name”,dateCreated:“02/21/2017”}] }' – InverseFalcon
有什么地方可以在Neo4j的地图上阅读,因为我无法使用这个工具,并且在搜索Google时找不到太多内容?我正在使用这些示例,并将“props”字符串作为我的POST语句的一部分传递给API,但我仍然收到一个错误消息,“为节点创建提供的参数不是Map”。 – n4nite