查询参数格式为SELECT ... IN与Cassandra使用Node.js驱动程序

时间:2015-02-24 06:02:09

标签: 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:第1:72行在输入中没有可行的选择' [' (... WHERE company_id = 4 AND [item_id] in ...)

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

这是一个有效的应用,以及其他不使用" SELECT .. IN"工作得很好。

我也可以让它起作用"丑陋"方式,但不愿意:

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

1 个答案:

答案 0 :(得分:4)

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

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