【问题标题】:neo4j - Doesn't link a relation to a node that was createneo4j - 不将关系链接到已创建的节点
【发布时间】:2018-08-22 08:01:58
【问题描述】:

我使用的是 Neo4j 服务器版本:3.4.4(企业版)和 Neo4j 浏览器版本:3.2.5。

当我运行这些命令时:

create (a:DVK {Naam : 'A'}) -[:IS_PROJECT_FOR]->(:DVL {Naam : 'C'})
create (a) -[:IS_PROJECT_FOR]->(:DVL {Naam : 'B'})

我创建了 4 个节点:A、B、C 和另一个节点,以及 2 个关系。我期望有 3 个节点:A、B、C 有 2 个关系。

你能告诉我我做错了什么并建议如何解决这个问题吗?

【问题讨论】:

  • 我用 Neo4j 3.4.4 企业版和浏览器 3.2.5 测试了您的查询,它按预期创建了 3 个节点和 2 个关系。您确定这是创建 4 个节点的查询吗?请注意,如果您不重用 a 变量,您将获得 4 个节点,您确定两个创建中的变量都匹配吗?
  • 此外,如果您在每行末尾有冒号,它们将成为单独的语句,因此变量不会保留在范围内,请注意这一点。
  • @InverseFalcon :是的,我使用了这 2 行语句并且我有 4 个节点。对于这个测试,我不重用 a 变量。如果我查看表,我会看到 3 个节点,但是当我查看关系表时,我有空字段(见附件)
  • 我认为您的附件没有通过,请重试或修改您的问题以包含它。至于返回关系,表格视图将只显示属性映射。检查代码结果选项卡以查看通过驱动程序处理结果时可用的内容。同样如前所述,如果您没有在第二次创建中重用变量(如a 变量),那么预计会有 4 个节点。 CREATE 创建整个模式,它不会尝试首先匹配图中的元素,如果需要,您需要自己进行。
  • @InverseFalcon :我进行了另一项测试 - 将两个语句放在一个查询中为我提供了三个具有两个关系的节点,这是我所期望的,但在我的情况下为一个查询放置 1 个语句两个查询没有'不给我预期的结果。

标签: neo4j


【解决方案1】:

根据主要问题上的 cmets,您似乎分别执行了每个查询,而不是在单个查询中一起执行。

请记住,变量不会保存到数据库中,并且仅在单个查询期间存在(如果由于未包含在查询中的 WITH 子句中而超出范围,则有时会更少)。

因此,对于第二个查询:

create (a) -[:IS_PROJECT_FOR]->(:DVL {Naam : 'B'})

执行此操作时,范围内没有任何内容,因此此处的 a 没有引用上一个查询中的 a 变量。相反,由于这是第一次使用a 进行查询,它将绑定到一个新创建的空白节点(没有标签,没有属性),并且将使用提供的属性创建一个 :DVL 节点,然后他们之间添加了:IS_PROJECT_FOR关系。

如果这两个创建是在同一个查询中执行的,那么第一个创建的 a 仍然在范围内,并且该节点将是执行第二个创建时使用的节点。

【讨论】:

    猜你喜欢
    • 2016-07-03
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2016-05-01
    • 2022-07-20
    相关资源
    最近更新 更多