首页 > 解决方案 > Node.js 连接到 Neo4j 运行相同的代码给出不同的结果

问题描述

在第一次打开 Neo4j 数据库后,从 Node.js 运行下面的 apoc.setLabels 代码会得到预期的结果。如果删除节点并再次运行相同的代码,则会出现不同的(第二个)结果。从 Node.js 中删除这些节点并再次运行代码,再次给出第二个结果。这个想法是使用从参数 nName 获取的标签重命名节点。有没有办法确保在 Node.js 中再次运行代码,而不是每次都重新启动数据库,会给出预期的结果而不是第二个结果?

// renameNodes.js

const neo4j  = require('neo4j-driver');
const driver = neo4j.driver("bolt://localhost", 
                            neo4j.auth.basic("neo4j", "neo4j"));
const session = driver.session();
const session1 = driver.session();
// start by creating four instances of the dummy, Tree class
// then, using apoc, rename the name (that is, label - node name) from
// one of the properties that has the desired label name.

session
    .run
    (
        "CALL apoc.create.node(['Tree'], {nName: 'Gum', title: 'Gum Tree'}) "
    )
    .then( ( ) =>
    {
      session
        .run
        (
           "CALL apoc.create.node(['Tree'], {nName: 'Fruit', title: 'Fruit Tree'}) "
       )
       .then( () => 
       {
           session
           .run
           (
               "CALL apoc.create.node(['Tree'], {nName: 'Pine', title: 'Pine Tree'}) "
           )
           .then( ( ) =>
           {
               session
                 .run
                 (
                    "CALL apoc.create.node(['Tree'], {nName: 'Green', title: 'Green Tree'}) "   
                 )

           })
       })
    })
    .then( ( ) =>
    {
        console.log('Hello');
        session1
          .run
          (
              "match (t:Tree) \
              call apoc.create.setLabels(t, [t.nName, 'Resource'] ) \
              yield node \
              remove node.nName \
              return node; "
          )
    })
    

启动数据库并在 Node.js 中运行代码后,结果是 4 个节点,标签为 Gum、Fruit、Pine 和 Green(如预期的那样)如果从 Neo4j 数据库中删除这些节点并再次在 Node.js 中运行代码,结果是标签 Gum、Fruit 然后最后 2 个节点仍然有它们原来的 Tree 标签

标签: node.jsneo4jrdf

解决方案


推荐阅读