【问题标题】:NodeJS + Cassandra: Unable to retrieve boolean and integer dataNodeJS + Cassandra:无法检索布尔和整数数据
【发布时间】:2015-03-22 08:20:23
【问题描述】:

我有一个基于 nodejs 和 cassandra 数据存储的 webapp。

表架构如下所示:

'id uuid PRIMARY KEY,' +
'model varchar,' +
'price int,' +
'isAvailable boolean,' + 
'profit int,' + 
'lastSaleDate timestamp'

我能够成功地更新记录。我正在使用准备好的语句插入。

当我检索时,虽然我得到了记录,但我无法获得除 uuid 和 varchar 数据类型(即 id 和模型)以外的任何值

console.log 返回以下内容:

id: '5210d4ea-9f57-4159-aee4-026a256841ee',
model: 'carModel1',
price: undefined,
isAvailable: undefined,
profit: undefined,
lastSaleDate: undefined

我需要做什么才能正确检索剩余数据?

编辑(nodejs 代码按要求):

创建表:

client.execute('CREATE TABLE IF NOT EXISTS franchise.cars (' +
                'id uuid PRIMARY KEY,' +
                'model varchar,' +
                'price int,' +
                'isAvailable boolean,' + 'profit int,' + 'lastSaleDate timestamp' +
                ');',
                next);

添加记录:

var upsertCars = 'INSERT INTO franchise.cars (id, model, price, isAvailable, profit, lastSaleDate)  '
    + 'VALUES(?, ?, ?, ?, ?, ?);';

var id = null;
if ( ! req.body.hasOwnProperty('id')) {
    id = cassandra.types.uuid();
} else {
    id = req.body.id;
}

var date_as_timestamp=new Date(req.body.lastSaleDate).getTime();

client.execute(upsertCars,
        [id, req.body.model, req.body.price, req.body.isAvailable, req.body.profit, date_as_timestamp],{prepare:true},
        afterExecution('Error: ', 'Car ' + req.body.model + ' upserted.', res));

获取记录:

var getCars = 'SELECT *FROM franchise.cars';

var cars=[];

    client.execute(getCars,{prepare:true}, function(err, result) {
        if (err) {
            res.status(404).send({ msg : 'Car not found.' });
        } else {
for(var i=0; i<result.rows.length;i++){
console.log(result.rows[i].isAvailable);
machines.push({id : result.rows[i].id, model : result.rows[i].model, price : result.rows[i].price, isAvailable : result.rows[i].isAvailable, profit : result.rows[i].profit, lastSaleDate : result.rows[i]. lastSaleDate});
}

【问题讨论】:

  • 您是否使用 cql 控制台验证了记录?还请在您的问题中包含相关的 nodejs 代码。
  • 添加了代码。不,我没有用 cql 检查记录,相信我的插入命令没有返回任何错误。
  • 我在 cql 控制台中验证了数据。他们都在场。

标签: node.js cassandra


【解决方案1】:

虽然插入需要带有正确大小写的属性,但获取数据应该使用小写的属性名称

即。

var upsertCars = 'INSERT INTO franchise.cars (id, model, price, isAvailable, profit, lastSaleDate)  '
    + 'VALUES(?, ?, ?, ?, ?, ?);';

可以插入,但是在获取时:

var getCars = 'SELECT *FROM franchise.cars';

var cars=[];

    client.execute(getCars,{prepare:true}, function(err, result) {
        if (err) {
            res.status(404).send({ msg : 'Car not found.' });
        } else {
for(var i=0; i<result.rows.length;i++){
console.log(result.rows[i].isAvailable);
machines.push({id : result.rows[i].id, model : result.rows[i].model, price : result.rows[i].price, isAvailable : result.rows[i].isAvailable, profit : result.rows[i].profit, lastSaleDate : result.rows[i]. lastSaleDate});
}

需要替换为:

var getCars = 'SELECT *FROM franchise.cars';

var cars=[];

    client.execute(getCars,{prepare:true}, function(err, result) {
        if (err) {
            res.status(404).send({ msg : 'Car not found.' });
        } else {
for(var i=0; i<result.rows.length;i++){
console.log(result.rows[i].**isavailable**);
machines.push({id : result.rows[i].id, model : result.rows[i].model, price : result.rows[i].price, isAvailable : result.rows[i].**isavailable**, profit : result.rows[i].profit, lastSaleDate : result.rows[i]. **lastsaledate**});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2012-03-12
    • 2016-04-08
    • 2016-02-19
    • 2019-07-29
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多