cassandra 2.0.7 cql SELECT Secific Value from map

ИЗМЕНИТЬ ТАБЛИЦУ пользователей ДОБАВИТЬ карту задач;

ОБНОВЛЕНИЕ пользователей SET todo = { '1':'1111', '2':'2222', '3':'3',.... } ГДЕ user_id = 'frodo';

теперь я хочу запустить следующий cql, но не удалось, есть ли другой метод?

ВЫБЕРИТЕ user_id, todo['1'] ОТ пользователей, ГДЕ user_id = 'frodo';

ps:

длина моей карты может измениться. например: {'1':'1111', '2':'2222', '3':'3'} или {'1':'1111', '2':'2222', '3': «3», «4»: «4444»} или { «1»: «1111», «2»: «2222», «3»: «3», «4»: «4444» ...}


person hi_glenn    schedule 04.06.2014    source источник
comment
См. следующий stackoverflow.com/questions/16024839/ Я думаю, это решит вашу проблему.   -  person kkmishra    schedule 04.06.2014
comment
моя ситуация отличается от рекомендованного вами URL. длина моей карты может измениться. например: {'1':'1111', '2':'2222', '3':'3'} или {'1':'1111', '2':'2222', '3': «3», «4»: «4444»} или { «1»: «1111», «2»: «2222», «3»: «3», «4»: «4444» ...}   -  person hi_glenn    schedule 05.06.2014


Ответы (1)


Если вы хотите использовать коллекцию карт, у вас будет ограничение: вы можете выбрать только коллекцию целиком (документы).

Я думаю, вы могли бы использовать предложение из ссылочного вопроса, даже если длина вашей карты изменится. Если вы сохраните эти пары ключ/значение для каждого user_id в отдельных полях и создадите свой первичный ключ на основе user_id и todo_k, у вас будет доступ к ним в запросе на выборку.

Например:

CREATE TABLE users (
  user_id text,
  todo_k text,
  todo_v text,
  PRIMARY KEY (user_id, todo_k)
);

-----------------------------
| user_id | todo_k | todo_v |
-----------------------------
| frodo   | 1      | 1111   |
| frodo   | 2      | 2222   |
| sam     | 1      | 11     |
| sam     | 2      | 22     |
| sam     | 3      | 33     |
-----------------------------

Затем вы можете выполнять такие запросы, как:

select user_id,todo_k,todo_v from users where user_id = 'frodo';
select user_id,todo_k,todo_v from users where user_id = 'sam' and todo_k = 2;
person BrianC    schedule 13.06.2014