gpt4 book ai didi

javascript - 如何在cassandra中更新其键为时间戳类型的集合

转载 作者:行者123 更新时间:2023-11-30 05:30:30 25 4
gpt4 key购买 nike

我正在尝试更新“ map ”列,但尝试这样做会导致错误:

错误:

error: database errorTypeError: Not a valid bigint, expected Long/Number/Buffer, obtained '2014-12-07T13:53:10.658Z'

尝试

var query_attendance = 'UPDATE emp_attendance SET attendace = attendace + ? where year = ? and month = ? and emp_id = ?';
var udpateAttendance = function(empId, timestampMillis, cb){
var foundDate = new Date(timestampMillis);
var year = foundDate.getUTCFullYear();
var month = foundDate.getUTCMonth();
var date = foundDate.getUTCDate();
var attendace = {};
attendace['2014-12-07T13:53:10.658Z'] = 'Present';
// winston.info('attendace' + JSON.stringify(foundDate));
var values = [attendace, year, month, empId];
var options = {
hints: ['map','int','int','int'],
prepare: true
};
winston.info('Values: ' + JSON.stringify(values));
client.execute(query_attendance, values, options, function(err, resultSet){
winston.info('Query Completed');
if(err){
winston.error('database error' + err);
cb(err, null);
return;
}
winston.info('Query successful');
cb(null, resultSet);
});
}

我的观点:

我想我需要告诉驱动程序 map 集合中的键类型是时间戳类型,但我没有找到如何向驱动程序指定此类输入。

最佳答案

经过对cassandra驱动库的大量调试,我终于找到了错误所在。

当“cassandra-driver”中的“encoder.js”接收到日期类型的输入时,“encodeTimestamp()”会使用“instanceof”关键字检查类型。这是我的错误导致错误的地方,因为

attendace[foundDate]
or
attendace['2014-12-07T13:53:10.658Z']

可能正在将 key 设为 'string' 类型(作为 js 新手,无法确认)。因此,问题的解决方案是,我需要将日期对象作为出席变量的键传递

注意:

尽管如此,我仍然无法将日期作为对象作为另一个对象的键传递,但这是完全不同的问题。只是为了继续运行流程(直到我找到将日期作为对象传递的方法),我对 cassandra 驱动程序中 'encoder.js' 的 'encodeTimestamp()' 做了一个小改动。改变

  function encodeTimestamp (value, type) {
console.log('Encoding time stamp: ' + value + '\ttype:'+type);
//parsing the date object,
var convertedDate = new Date(value);
// check if supplied value is converted into date, if so, assign its value to value variable and continue with original process
if((convertedDate) && (convertedDate!= NaN)){
value = convertedDate;
}
if (value instanceof Date) {
console.log('Value is date ');
value = value.getTime();
}else{
console.log('input value ' + value + ' is not a date');
}
return encodeBigNumber (value, type);
}

这只是 hack,所以我希望一定有一些真正的解决方案,并且有人会想出那个,

关于javascript - 如何在cassandra中更新其键为时间戳类型的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27343545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com