【问题标题】:Neo4j merge's not saving dataNeo4j 合并不保存数据
【发布时间】:2019-10-21 22:32:59
【问题描述】:

我有以下使用 PHP 和 GraphAware 的代码:

$stack = $client->stack();
$stack->push('  MATCH (student:Student{id:123})
        MATCH (spring:Term{name:"Spring2017"})
        MATCH (class:Class{name:"Cypher101"})
        MERGE (student)-[:ENROLLED_IN]->(class)-[:FOR_TERM]->(spring)');
$results = $client->runStack($stack);

$res = $client->run('MATCH (n) RETURN count(n)');
print_r($res->records());

我复制了此处的示例代码:https://neo4j.com/developer/kb/understanding-how-merge-works/,由于某种原因 print_r() 返回以下内容:

Array
(
    [0] => GraphAware\Bolt\Record\RecordView Object
        (
            [keys:protected] => Array
                (
                    [0] => count(n)
                )

            [values:protected] => Array
                (
                    [0] => 0
                )

            [keyToIndexMap:GraphAware\Bolt\Record\RecordView:private] => Array
                (
                    [count(n)] => 0
                )

        )

)

如果我运行 CREATE 命令,查询工作正常,但由于某种原因上面的代码不会。有人可以告诉我我做错了什么吗?

【问题讨论】:

  • 您的查询似乎正确。你能检查你匹配的节点是否存在于数据库中吗?
  • 从 Neo4j 浏览器试试这个,如果它有效,你可能在你的 PHP 代码中遗漏了一些东西。
  • 它们不存在 - 因为我认为如果不存在合并会创建它们?
  • 那你应该把前3行的MATCH替换成MERGE
  • 哦,完美!请给出答案,我会奖励它:o)

标签: neo4j cypher graphaware


【解决方案1】:

您的查询似乎正确。

检查这些节点是否存在于 Neo4j 数据库中。

  • 如果数据库中不存在这些节点,请先创建这些节点并 然后运行查询。
  • 您也可以将MATCH 替换为MERGE,在这种情况下,您不需要
    必须单独创建这些节点。

注意:不建议在单个查询中使用多个MERGE,因此请尝试 使用第一个解决方案(单独创建节点)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多