编辑:在3.4上也有相同的行为
EDIT2:如果我从连接中删除disableLosslessIntegers,问题就消失了,但是所有整数返回为{low:20,high:0}类型结构,这破坏了我的整个应用程序
以下代码在节点为1.7.2 neo4j-driver的neo4j 3.3上运行良好:
import {v1 as neo4j} from 'neo4j-driver';
const url: string = process.env.COREDB_URL || '';
const user: string = process.env.COREDB_USERNAME || '';
const password: string = process.env.COREDB_PASSWORD || '';
const driver = neo4j.driver(url, neo4j.auth.basic(user, password), {disableLosslessIntegers: true});
let connection = driver.session()
async function go() {
let res = await connection.run(`create (b:Banana {tag: 'test'}) return b,id(b) as id`, {});
let b = res.records[0].get('b').properties
console.log('b',b)
let id = res.records[0].get('id')
console.log('id',id)
res = await connection.run(`MATCH (u) where id(u)=$id return u as id`, {id: id});
console.log(res.records)
let id2 = res.records[0].get('id').properties;
console.log('id2',id2)
}
go().then(() => console.log('done')).catch((e) => console.log(e.message))
它提供以下输出:
> node tools\test-id.js
b { tag: 'test' }
id 1858404
[ Record {
keys: [ 'id' ],
length: 1,
_fields: [ [Node] ],
_fieldLookup: { id: 0 } } ]
id2 { tag: 'test' }
done
在3.5.1下,它不起作用。第二条语句不返回任何记录:
> node tools\test-id.js
b { tag: 'test' }
id 1856012
[]
Cannot read property 'get' of undefined
顺便说一句,我需要在创建之后立即执行id by get的原因是,我正在使用apoc触发器在创建后向节点添加内容,并且apoc触发器显然在对象创建并返回后运行,因此我需要第二个机会来查看转换后的节点。 但是,对于这个简化的示例,我从数据库中删除了触发器,以确保它不会引起问题