Запрос базы данных кассандры с массивом - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь сделать запрос в моей базе данных кассандры, чтобы получить данные из списка имен, хранящихся на стороне сервера массива.Это хранится в виде массива.Я знаю, что данные, к которым я обращаюсь, хранятся в виде строки в моей базе данных, и поэтому я добавил к ним одинарные кавычки (я пробовал с этим и без него, но безуспешно).

Вот мой запрос.

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 голосов
/ 16 мая 2018

Правильный ввод параметров запроса - это массив значений. В этом случае это будет массив параметров, содержащий один элемент, то есть массив имен.

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

0 голосов
/ 14 мая 2018

Если имя было ключом кластеризации, то вы могли бы запросить «in» и «разрешить фильтрацию» следующим образом:

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

Предполагая, что имя не является ключом кластеризации, выможет использовать ключ кластеризации (например, date_of_birth), если он имеет логический смысл, то есть если фильтрация по дате имеет смысл в отношении имени, например:

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

Если вы не можете выполнить ни одну из этих вещей, вам нужно перебрать массив с помощью Javascript (например, foreach).

...