【问题标题】:How to create a relationship between 2 nodes where the nodes' labels, properties and the relationship are variable using APOC如何使用 APOC 在节点标签、属性和关系可变的 2 个节点之间创建关系
【发布时间】:2018-04-28 03:45:35
【问题描述】:

我很难用 Cypher 和 APOC 库查询 Neo4j。几天前有人建议我使用 APOC 库来创建具有基于变量的标签的节点。创建这些节点效果很好,但几天过去了,我仍然不知道如何在这些节点之间创建关系。

我收到的错误消息与我开始使用 APOC 之前收到的错误消息相同。查询的第一个字符始终被视为无效输入。我得到的另一个问题是过程调用没有提供所需数量的参数。

我不太了解 APOC 关于如何建立关系的文档。我还尝试了 CALL APOC.help('relationship'),发现也可以使用 apoc.merge。但是,这在他们的文档中找不到。此外,我在 Neo4J 的博客上阅读了 APOC 的新夏季版本,但我仍然真的不知道如何使这个查询工作。

对于我能想到的查询,我已经尝试了所有可能的调整,但节点无法连接。我显然不知道自己在做什么,错过了什么。

我真的很希望能够匹配 2 个节点并在它们之间建立关系。这些节点的标签和属性是可变的,因为这是它们的创建方式。如果可能的话,如果关系类型也可以基于变量,那就太好了。

我正在使用 NodeJS、Neo4j 驱动程序并将 APOC Jar 文件成功放入 Neo4j 的插件文件夹中。

这是一个失败的查询,以了解我正在尝试做什么:

('CALL apoc.create.relationship([{labelParamN1}], {name: {nameParamN1}}, {relationParam}, [{labelParamN2}], {name: {nameParamN2}})',
{labelParamN1: labelParamN1, nameParamN1: nameParamN1, labelParamN2: labelParamN2, nameParamN2: nameParamN2, relationParam: relation})

非常感谢您对此查询的帮助

【问题讨论】:

  • 1.你的错误信息是什么?如果我尝试您的查询,则会收到错误 Procedure call does not provide the required number of arguments: got 5 expected 4. 错误消息详细说明了所需的参数:apoc.create.relationship(from :: NODE?, relType :: STRING?, props :: MAP?, to :: NODE?)。 2.遇到零星记录的库时,通常最好检查它的the related unit tests,它提供了一个如何使用它的示例。
  • 非常感谢您向我展示相关的单元测试。我以前没见过他们。如果我将来再次被卡住,我肯定会先检查它们。谢谢!

标签: node.js neo4j cypher


【解决方案1】:

您首先必须使用MATCH 来获取所需的节点(n1n2),然后使用apoc.create.relationship 方法。如果您确实想在关系上添加任何属性(因此您只需将 {} 传递给第三个参数),以下查询应该可以工作:

MATCH (n1 {name: {nameParamN1}}), (n2 {name: {nameParamN2}})
CALL apoc.create.relationship(n1, {relationParam}, {}, n2)
YIELD rel
RETURN rel

【讨论】:

  • 非常感谢!有用。我检查了除了名称之外,我是否可以向 n1 和 n2 添加更多属性。这也很好用。我终于可以再继续了!我不知道为什么我一直试图按标签匹配节点,这根本没有必要。感谢您的努力!
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多