有没有一种方法可以通过cypher返回一个整数?我正在使用neo4j和JavaScript驱动程序。然而,当我执行count()时,我得到{low: 10, high: 0}。我想强制它返回一个低整数,而不是上面的对象。这可以通过cypher实现吗?请注意,我不想在neo4j JavaScript驱动程序中这样做,而更喜欢在cypher中这样做,因为我知道这将是一个很低的数字。
count()
{low: 10, high: 0}
h4cxqtbf1#
从1.6版本的驱动程序开始,可以将其配置为仅返回本机数字而不是自定义对象。配置选项会影响驱动程序返回的所有整数。如果数据库包含范围[Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]之外的整数,则启用此选项可能会导致精度损失和返回不正确的数值。
[Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]
const driver = neo4j.driver( 'neo4j://localhost', neo4j.auth.basic('neo4j', 'neo4j'), { disableLosslessIntegers: true } )
字符串请记住,MAX_SAFE_INTEGER是2^53-1 = 9,007,199,254,740,991。资料来源:
MAX_SAFE_INTEGER
2^53-1 = 9,007,199,254,740,991
pu82cl6c2#
Cypher只适用于Long和Double值。JavaScript无法充分表示64位Long。这里有来自Neo4j JavaScript驱动程序的建议,用于在向Neo4j查询提供参数时处理此问题,以及处理返回的长整型。
8i9zcol23#
使用neo4j.integer.toNumber。所以基本上,当你想表示这样的值时,可以使用类似于
neo4j.integer.toNumber
variable.toNumber()
字符串你会得到一个很好的旧int值。
int
rkttyhzu4#
您可以为转换编写简单的处理程序:
var transformIntegers = function(result) { return new Promise( (resolve,reject) => { try { result.records.forEach( function(row, i) { row._fields.forEach( function(val, j) { result.records[i]._fields[j] = neo4j.isInt(val) ? (neo4j.integer.inSafeRange(val) ? val.toNumber() : val.toString()) : val; }) }) resolve(result); } catch (error) { reject( error ); } }); };
字符串举个例子:
session .run('MATCH (A) RETURN ID(A) AS id, toInteger(10^20) as unsafe LIMIT 1') .then( transformIntegers ) .then( function(result) { console.log(result.records[0]); session.close(); driver.close(); }) .catch( function(error) { console.log(error); });
型
ljsrvy3e5#
在我的对象的构造函数中,我使用这个函数found here来转换为JS友好的数字。到目前为止效果很好!
function toNumber({ low, high }) { let res = high for (let i = 0; i < 32; i++) { res *= 2 } return low + res }
字符串
5条答案
按热度按时间h4cxqtbf1#
从1.6版本的驱动程序开始,可以将其配置为仅返回本机数字而不是自定义对象。配置选项会影响驱动程序返回的所有整数。如果数据库包含范围
[Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]
之外的整数,则启用此选项可能会导致精度损失和返回不正确的数值。字符串
请记住,
MAX_SAFE_INTEGER
是2^53-1 = 9,007,199,254,740,991
。资料来源:
pu82cl6c2#
Cypher只适用于Long和Double值。JavaScript无法充分表示64位Long。
这里有来自Neo4j JavaScript驱动程序的建议,用于在向Neo4j查询提供参数时处理此问题,以及处理返回的长整型。
8i9zcol23#
使用
neo4j.integer.toNumber
。所以基本上,当你想表示这样的值时,可以使用类似于字符串
你会得到一个很好的旧
int
值。rkttyhzu4#
您可以为转换编写简单的处理程序:
字符串
举个例子:
型
ljsrvy3e5#
在我的对象的构造函数中,我使用这个函数found here来转换为JS友好的数字。到目前为止效果很好!
字符串