使用数组查询cassandra数据库

时间:2018-05-14 12:51:07

标签: node.js express cassandra cassandra-driver

我正在尝试查询我的cassandra数据库,以从阵列服务器端保存的名称列表中返回数据。这是一个数组。 我知道我访问的数据是作为一个字符串存储在我的数据库中的,所以我在它周围添加了单引号(我已尝试过,有没有这个,但没有运气)。

这是我的查询。

const arr = ["ukcust1","ukcust2","ukcust5"];
//Here I append single quotes before and after to each string if needed

const query = "SELECT * FROM table_name WHERE name = ?";
client.execute(query, arr, { prepare:true }, function (err, result) {
..//Code
};

我在这里缺少什么?我希望查询为:

SELECT * FROM table_name WHERE name = each of the names in the array 'arr';

2 个答案:

答案 0 :(得分:3)

如果name是一个集群密钥,那么您可以使用“in”和“allow filtering”查询,如下所示:

select * from table_name where name in ('ukcust1','ukcust2','ukcust3') allow filtering

假设name不是聚类键,你可以使用聚类键(例如,date_of_birth),如果它具有逻辑意义 - 也就是说,如果按日期过滤对名称有意义 - 就像这样:

select * from table_name where date_of_birth in (1969, 1972) name in ('ukcust1','ukcust2','ukcust3') allow filtering

如果您无法执行上述任何一项操作,则需要使用Javascript(例如foreach)遍历数组。

答案 1 :(得分:0)

查询参数的正确输入是值数组。在这种情况下,它将是一个包含单个项目的参数数组,即一个名称数组。

const arr = ["ukcust1","ukcust2","ukcust5"];
const query = "SELECT * FROM table_name WHERE name = ?";

// Note the array containing a single item
const parameters = [ arr ];

client.execute(query, parameters, { prepare: true }, callback);

请参阅文档中的更多信息:https://docs.datastax.com/en/developer/nodejs-driver/3.5/faq/#how-can-i-use-a-list-of-values-with-the-in-operator-in-a-where-clause