Node.js 在节点js的cassandra中插入BigInt

Node.js 在节点js的cassandra中插入BigInt,node.js,cassandra,datastax,Node.js,Cassandra,Datastax,我有一张非常简单的卡桑德拉桌子 名称:测试 列:id(bigint,主键)名称(文本) 我正试图使用nodejs(使用cassandra驱动程序)将值插入到该文件中 插入成功完成,但当我检查我的cassandra数据库时,看起来好像我有大int列的垃圾值 有没有解释为什么会发生这种情况?您需要明确指定类型作为execute函数的第三个参数: client.execute("insert into test (id, name) values (?, ?)", [123, "dskddjls"]

我有一张非常简单的卡桑德拉桌子
名称:测试
  • id(bigint,主键)
  • 名称(文本)
    • 我正试图使用nodejs(使用cassandra驱动程序)将值插入到该文件中

      插入成功完成,但当我检查我的cassandra数据库时,看起来好像我有大int列的垃圾值


      有没有解释为什么会发生这种情况?

      您需要明确指定类型作为
      execute
      函数的第三个参数:

      client.execute("insert into test (id, name) values (?, ?)", [123, "dskddjls"], {hints: ["bigint", null]}, function (err, response) {
         ...
      })
      
      原因是,对于某些字段,cassandra驱动程序无法猜测类型(如bigint或timestamp),因此需要提示它。对于字符串或正则数字,它将在没有提示的情况下工作。

      在中,您可以看到
      bigint
      的预期JavaScript类型是
      Long
      。JavaScript
      Number
      类型是a,驱动程序使用它来表示Cassandra
      int
      float
      double
      (默认值)

      在本例中,如果要将应用程序中的值作为数字插入,应使用
      Long.fromNumber()
      方法:

      const query = "insert into test (id, name) values (?, ?)";
      client.execute(query, [ Long.fromNumber(123), "my name" ], callback);
      
      此外,为了在JavaScript类型和Cassandra类型之间进行精确映射(以及其他好处),您应该。在您的情况下,如果设置了
      prepare
      标志,驱动程序将识别预期值为
      Long
      ,并从
      Number
      进行转换:

      client.execute(query, [ 123, "my name" ], { prepare: true }, callback);
      

      您是否可以尝试显式指定类型:
      client.execute(“插入测试(id,name)值(?,)”,[123,“dskddjls”],{hits:[“bigint”,null]},function(err,data){……})
      @VsevolodGoloviznin是的,这很有效。那么我们需要显式指定类型吗?
      bigint
      的预期JavaScript类型是
      Long
      :True!另一种解决方法:)尽管如此,准备语句可能并不总是有效的
      client.execute(query, [ 123, "my name" ], { prepare: true }, callback);