node.js - 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 标签
解决方案
推荐阅读
- angular - 将接口类型变量序列化为字符串
- optaplanner - optaplanner - 在运行时禁用 PlanningVariable
- laravel - 未捕获的 ReferenceError:未定义 FullCalendar (Webpack/NPM)
- excel - 使用 VBA 密码保护自动报告
- vue.js - 错误不知道如何把这个值变成一个节点
- javascript - Mat-Checkbox 绑定模型可以是可选的还是空的?
- c++ - 如何在 C++ 上启动异步线程
- flutter - FutureBuilder 总是返回 Future 的实例
- c++ - 使用相同的方法对不同的类使用一个变量
- sql - 将两个 datetimes2 变量比较结果设置为另一个位变量的 SQL Server 简单表达式将不起作用