【问题标题】:Nodejs cassandra datatype issueNodejs cassandra数据类型问题
【发布时间】:2014-10-13 12:26:49
【问题描述】:

我正在使用 node-cassandra-cql 驱动程序 (https://github.com/jorgebay/node-cassandra-cql) 对 cassandra 列族进行样本选择。

我的 cf 有三列具有该数据类型:

1 - value -> text
2 - date  -> timestamp
3 - hits  -> counter

使用 nodeJS 来获取行:

client.execute('SELECT date,value,hits FROM cf LIMIT 100', [],
      function(err, result) {
        if(err){
            var error = {error:true,message:err};
            res.send(error);
        }
        else{
            var trends = {};
            for(var i=0;i<result.rows.length;i++){
                var row      = result.rows[i];
                console.log(row.date);
                console.log(row.hits);
            }
        }
        }
);

控制台日志给了我:

{
    "low": 1342763392,
    "high": 323,
    "unsigned": false
}
{
    "low": 1,
    "high": 0,
    "unsigned": false
}

我需要做什么才能获得正确的价值?

谢谢!

【问题讨论】:

  • 您可以使用“int”或“double”数据类型来代替计数器,并检查它是否正常工作。因为在我知道使用计数器数据类型之前,该字段必须是主键。

标签: node.js cassandra cql


【解决方案1】:

Cassandra 计数器列值是一个 64 位有符号整数(bigints),在 Node.js 驱动程序中表示为 Google Closure's Long

要获取bigint的十进制值的字符串表示,可以使用#toString()方法。

//"1", "2", ...
row.hits.toString();

【讨论】:

  • 这就是答案!谢谢!
  • parseInt() 怎么样?看起来它给了我正确的值,但我可以依赖它吗?
【解决方案2】:

jorgebg 的回答也适用于执行 COUNT(*) 时。

例如: 从 my_table 中选择计数(*);

在这种情况下提取我使用的值: result.rows[0].count.toString();

【讨论】:

    【解决方案3】:
    const str = result.first().count;
    const count = JSON.parse(str);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-03
      • 2014-01-02
      • 1970-01-01
      • 2016-09-10
      • 2021-04-24
      • 2019-06-29
      • 2017-10-13
      相关资源
      最近更新 更多