Node.js 使用KOA-NEO4J或BOLT作为POST语句传递属性集和节点集

Node.js 使用KOA-NEO4J或BOLT作为POST语句传递属性集和节点集,node.js,neo4j,koa,neo4j-bolt,Node.js,Neo4j,Koa,Neo4j Bolt,我正在构建一个连接到NEO4J实例的RESTAPI。我使用koa-neo4j库作为基础。我是所有这些技术的初学者,但是多亏了这个论坛的一些帮助,我才有了基本的功能。例如,下面的代码允许我使用标签度量创建一个新节点,并设置名称和dateAdded属性 网址: index.js createMetric.cyp 然而,我很难知道如何处理更复杂的例子。当我不知道在预先创建一个新节点时会添加多少属性,或者当我想在一个post语句中创建多个节点时,我该如何处理这种情况。理想情况下,我希望能够将JSON之类

我正在构建一个连接到NEO4J实例的RESTAPI。我使用koa-neo4j库作为基础。我是所有这些技术的初学者,但是多亏了这个论坛的一些帮助,我才有了基本的功能。例如,下面的代码允许我使用标签度量创建一个新节点,并设置名称和dateAdded属性

网址:

index.js

createMetric.cyp

然而,我很难知道如何处理更复杂的例子。当我不知道在预先创建一个新节点时会添加多少属性,或者当我想在一个post语句中创建多个节点时,我该如何处理这种情况。理想情况下,我希望能够将JSON之类的东西作为POST的一部分传递,该POST将包含我想要创建的所有节点、标签和属性。这样的事情可能吗?我尝试使用下面的Cypher查询并在帖子正文中传递JSON字符串,但没有成功

UNWIND $props AS properties
CREATE (n:metric)
SET n = properties
RETURN n
我最好切换到Neo4j RESTAPI,而不是BOLT协议和KOA-Neo4j框架。根据我的研究,我认为使用BOLT更好,但我希望在前端和后端之间有一个restapi作为中间层,所以如果这在长期内更容易,我愿意改变


谢谢你的帮助

您的密码语法在几个方面都不好

“展开”仅接受集合作为其参数,而不接受字符串。 SET n=properties仅当属性是映射而不是字符串时才合法。 假设$props是一个包含所有要与新创建的节点一起存储的属性的映射,则此查询可用于创建单个节点:

CREATE (n:metric $props)
RETURN n
如果要创建多个节点,则此查询基本上与您的查询相同,但仅当$prop_集合是地图集合时,此查询才起作用:


我在尝试将复杂类型作为参数传递给neo4j时也遇到了困难,这与js和cypher之间通过bolt进行的类型转换有关,除了在官方回购协议中提交问题外,没有什么可以做的。koa-neo4j在引擎盖下使用官方驱动程序

在koa-neo4j中处理此类场景的一种方法是在发送到Cypher之前使用JavaScript操纵参数:

还可以使用后处理生命周期挂钩进一步操作密码查询的结果:


谢谢你的意见。我尝试了您的代码并通过了以下props=[{metricName:testname,dateCreated:02/21/2017}],但是我得到了为节点创建提供的错误参数不是映射。很明显,我没有正确地构造映射-这上面的任何指针?@n4nite您的props参数必须是一个映射,并且您希望在查询中使用的值应该是该映射中的一个条目,其值是一组映射的集合。如果我们使用cybersam的例子,要使用$prop_collection参数,你的道具必须是:props={prop_collection:[{metricName:Test Name,dateCreated:02/21/2017}]}我在Neo4j中有什么地方可以在地图上阅读,因为我无法让它工作,而且在搜索谷歌时找不到多少?我正在使用这些示例,并将props字符串作为POST语句的一部分传递给API,但我仍然得到一个错误,即为节点创建提供的参数不是映射。谢谢-我花了一点时间来实现这一点,但您的答案是正确的。嗨,Keyvan。感谢您的评论和伟大的Koa-Neo4j框架。我对No.No.KoA膝关节炎和NeN4J都是新手,所以这个框架是一种神奇的起跑方式。一旦我在我的编码技能方面变得更加胜任,我希望能为框架做出贡献!干杯@n4nite,如果您遇到任何与框架相关的问题,我将非常乐意为您提供帮助。我很高兴看到你用koa-neo4j做了很酷的事情。
CREATE (n:metric { 
    name: $metricName, 
    dateAdded: $dateAdded
}) 
return ID(n) as id
UNWIND $props AS properties
CREATE (n:metric)
SET n = properties
RETURN n
CREATE (n:metric $props)
RETURN n
UNWIND $prop_collection AS props
CREATE (n:metric)
SET n = props
RETURN n