Jas*_*ion 3 cql cassandra node.js 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);
Run Code Online (Sandbox Code Playgroud)
但是,尝试使用 Cassandra 节点驱动程序使用一组 ID 运行此查询时,根据格式,我会收到各种错误。这是我尝试过的:
client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (?)", [id, item_ids], function(err, rs) { ...
Run Code Online (Sandbox Code Playgroud)
错误是:
ResponseError: 类型为 uuid 的 item_id 的列表文字无效
有了这个:
client.execute("SELECT * FROM sourcedata WHERE company_id = ? AND item_id in (?)", [id, item_ids], function(err, rs) { ...
Run Code Online (Sandbox Code Playgroud)
错误是:
ResponseError: line 1:72 在输入 '[' (...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) { ...
Run Code Online (Sandbox Code Playgroud)
您应该使用IN ?不带括号的,以提供一个列表:
const query = 'SELECT * FROM sourcedata WHERE company_id = ? AND item_id in ?';
client.execute(query, [ id, item_ids ], { prepare: true }, callback);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |