You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确更新Cassandra中类型为map<boolean, int>的列?

解决Cassandra Node.js驱动更新布尔键Map列的问题

问题根源

JavaScript对象的键会被强制转换为字符串,当你传入{"false":1, "true":2}或{false:1, true:2}时,键最终都是字符串类型。Cassandra驱动处理时,仅能将字符串"true"解析为布尔类型true,但字符串"false"无法匹配布尔类型的键false,导致该键值对被丢弃,最终只保留true:2。

正确解决方案

使用ES6 Map结构传递参数,因为Map支持非字符串类型的键,Cassandra Node.js驱动会正确识别其中的布尔键并映射到Cassandra的MAP<boolean, int>类型。

代码示例

  1. 构建包含布尔键的Map:
const mapData = new Map();
mapData.set(false, 1);
mapData.set(true, 2);
  1. 执行更新语句:
client.execute(
  "UPDATE my_table SET map_bool_int_col = ? WHERE id = ?",
  [mapData, 1],
  { prepare: true }
);

可选:增量更新单个键值对

如果只需要更新Map中的某个键值对,可以使用Cassandra的Map索引语法:

// 新增或更新false对应的value
client.execute(
  "UPDATE my_table SET map_bool_int_col[?] = ? WHERE id = ?",
  [false, 1, 1],
  { prepare: true }
);

验证结果

执行查询语句获取数据时,会得到完整的Map值:

client.execute("SELECT map_bool_int_col FROM my_table WHERE id = ?", [1], { prepare: true })
  .then(result => {
    console.log(result.rows[0].map_bool_int_col); // 输出: Map(2) { false => 1, true => 2 }
  });

内容的提问来源于stack exchange,提问作者Liberator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:52:10