Neo4j uses 64-bit signed integers, which can exceed the safe integer range of JavaScript (Number.MIN_SAFE_INTEGER to Number.MAX_SAFE_INTEGER). To prevent precision loss, the driver uses an internal integer type instead of native JavaScript numbers.
Writing Integers
Any JavaScript number passed as a parameter is treated as a Float. To write an integer, use neo4j.int(). For values outside the safe JavaScript range, pass the value as a string to neo4j.int().
Reading Integers
When reading values, check if they are within the safe range before converting to a native number using neo4j.integer.inSafeRange() and .toNumber(). For large integers, use .toString().
Enabling Native Numbers (Lossy)
You can configure the driver to return native JavaScript numbers for all integers by setting disableLossyIntegers: true in the driver configuration. Warning: This can result in loss of precision for integers outside the safe JavaScript range.
// Writing integers
session.run('CREATE (n {age: $myIntParam})', { myIntParam: neo4j.int(22) });
session.run('CREATE (n {age: $myIntParam})', { myIntParam: neo4j.int('9223372036854775807') });
// Reading integers safely
var smallInteger = neo4j.int(123);
if (neo4j.integer.inSafeRange(smallInteger)) {
var aNumber = smallInteger.toNumber();
}
// Reading large integers as strings
var largeInteger = neo4j.int('9223372036854775807');
if (!neo4j.integer.inSafeRange(largeInteger)) {
var integerAsString = largeInteger.toString();
}
// Configuring driver to return native (potentially lossy) numbers
var driver = neo4j.driver(
'neo4j://localhost',
neo4j.auth.basic('neo4j', 'password'),
{ disableLossyIntegers: true }
);