2015-05-07 28 views
4

我有一个字段cat_to_pub类型为MAP从卡桑德拉的MAP中删除多个元素?

{1: '9-20-21', 2: '2-5-21', 4: '2-5-21', 5: '2', 6: '2', 9: '2-83-153-149', 11: '2-5-21-31', 29: '100', 32: '113-198-21'} 

我可以用

DELETE cat_to_pub[1] FROM user_preferences WHERE user_id = 'jayeshjain'; 

我如何删除从这个集合中的多个元素删除该地图的单个元素?

例如,如果我想删除密钥1和2,我如何形成我的查询?

回答

3

我不认为有一种方法可以将它作为单个简单语句来完成,但您应该可以将其作为批处理语句来完成。由于您从同一个分区中删除(因为您从同一个映射列中删除),所以性能应该仍然相当不错,因为这仍然会作为一个操作完成(通过执行查询跟踪进行验证)。

BEGIN UNLOGGED BATCH 
    DELETE cat_to_pub[1] from user_preferences where user_id ='jayeshjain'; 
    DELETE cat_to_pub[2] from user_preferences where user_id ='jayeshjain'; 
APPLY BATCH; 
2

随着卡桑德拉的新版本(试图与3.7),你可以 update user_preference set cat_to_pub = cat_to_pub - { 1, 2 } where user_id = 'jayeshjain';

+1

这应该是公认的答案 –

+0

这也适用于卡桑德拉2.X –