РЕДАКТИРОВАТЬ: только что получил такое же поведение на 3,4
EDIT2: Если я удаляю disableLosslessIntegers из соединения, проблема исчезает, но все целые числа возвращаются в виде структур типа {low: 20, high: 0}, что нарушает все мое приложение
Следующий код отлично работает на neo4j 3.3, используя neo4j-драйвер 1.7.2 для узла:
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
Кстати, причина, по которой мне нужно сделать get by id сразу после создания, заключается в том, что я использую триггер apoc для добавления объектов в узел после создания, и триггеры apoc, очевидно, запускаются после создания и возврата объекта, поэтому Мне нужно второе, чтобы увидеть преобразованный узел.
Но для этого перегруженного примера я удалил триггер из моей БД, чтобы убедиться, что он не вызывает проблему