Cassandra:无法更新CQL中的地图数据类型

时间:2018-08-18 12:55:19

标签: node.js cassandra cqlsh

CREATE TABLE IF NOT EXISTS  Social ("partitionId" text,"name" text,  "id"   text,  "data1" text, "data2" text,  "data3" map<text,text>, "data4 boolean, "data5" map<text, text>, primary key ("partitionId","name","id"));

const newValue = Object.values({
sId: '6e4d02ddc56bb014fee',
sData: '{"stamina":"yes"}',
rId: 'b1a264ed-b3ss9270316',
re: '101-r'
});

const q = 'UPDATE social SET "data5[?] = ? WHERE "partitionId" = \'social\' AND "id" = ? AND "name" = ?;';


client.execute(q, newValue, { prepare: true }).then(result => console.log(result.wasApplied()));

输出:

UnhandledPromiseRejectionWarning:ResponseError:未定义的列名称data5     在FrameReader.readError

我正在使用nodejs cassandra驱动程序来更新数据类型映射的列data5,但出现上述错误。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我几次尝试都找到了解决方案。 经过Cassandra文档的一些研究,我发现了这一点:

Cassandra默认将所有表/列名称转换为小写。如果需要区分大小写的表/列名,则将其用双引号引起来。

所以,我已经修改了查询:

const q = 'UPDATE Social SET "data5"[?] = ? WHERE "partitionId" = \'router\' AND   "id" = ? AND "name" = ?;';

成功了。