node.js - 使用 Node.js 驱动程序的 Cassandra 的 SELECT ... IN 查询参数格式

标签 node.js cassandra cql cassandra-node-driver

我有一个带有 IN 参数的 Cassandra SELECT 查询,我想通过 Node 驱动程序运行它,但无法弄清楚语法。

在 cqlsh 控制台上,我可以运行此选择并获得正确的结果:

SELECT * FROM sourcedata WHERE company_id = 4 AND item_id in (ac943b6f-0143-0e1f-5282-2d39209f3a7a,bff421a0-c465-0434-8806-f128612b6850,877ddb6d-a164-1152-da77-1ec4c4468258);

但是,尝试使用 Cassandra Node 驱动程序使用 ID 数组运行此查询时,我会收到各种错误,具体取决于格式。这是我尝试过的:

client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (?)", [id, item_ids], function(err, rs) { ...

错误是:

ResponseError:uuid 类型的 item_id 的列表文字无效

有了这个:

client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (?)", [id, item_ids], function(err, rs) { ...

错误是:

ResponseError: line 1:72 no viable alternative at input '[' (...WHERE company_id = 4 AND [item_id] in...)

item_ids 是一个字符串对象数组,它们是通过对另一个 Cassandra 表的选择获取的。

这是一个有效的应用程序,其他不使用“SELECT .. IN”的查询也可以正常工作。

我也可以让它以“丑陋”的方式工作,但我不想这样做:

client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (" + item_ids.toString() + ")", [id,], function(err, rs) { ...

最佳答案

您应该使用不带括号的 IN ? 来提供列表:

const query = 'SELECT * FROM sourcedata WHERE company_id = ? AND item_id in ?';
client.execute(query, [ id, item_ids ], { prepare: true }, callback);

关于node.js - 使用 Node.js 驱动程序的 Cassandra 的 SELECT ... IN 查询参数格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28689143/

相关文章:

node.js - 无法启动已部署(MongoDB 启动失败)

java - Cassandra - 更新并选择大于的字段

node.js - 如何使用 jest 框架为 cassandra 在 Node.js 中执行查询编写单元测试

node.js - Mongodb:如何获取 N 到 M 条记录?

javascript - 如何访问这个 Javascript mysql 错误对象 (Nodejs)?

groovy - 使用 Datastax 和 CQL 在 Cassandra 中获取随机行

database - Cassandra 顺序和聚类键

python - 多节点 Cassandra 集群和不一致的客户端读取请求

.net - 在node js中使用edge绑定(bind)DLL库不成功

python - 在 Windows 7 32 位上安装带有 Python 绑定(bind)的 Thrift