sql >> Database >  >> NoSQL >> Redis

Hoe GROUP BY te doen in Redis

U kunt dit doen

in een lua-script genaamd script.lua

local hash_val = redis.call('hgetall',KEYS[1])
local result = {}
for i = 0 , #hash_val do
    if hash_val[i] == ARGV[1] then
        table.insert(result,hash_val[i-1])
        table.insert(result,hash_val[i])
    end
end
return result

lua hash krijgen op volgorde key0,val0,key1,val1, etc...

en nadat je het zo kunt noemen:

redis-cli  eval "$(cat script.lua)" 1 "my_hash" 1

je hebt:

1) "foo"
2) "1"
3) "bar"
4) "1"

meer informatie voor de evaluatiefunctie hier

bewerken: zoals gezegd deltheil in commentaar, om alleen de waarden te controleren en geen onnodige controle uit te voeren, kunt u de for-lus met 2 stappen omdat de weergave van een hash-verzoek key,values,key,value,etc...:

local hash_val = redis.call('hgetall',KEYS[1])
local result = {}
for i = 2 , #hash_val, 2 do
    if hash_val[i] == ARGV[1] then
        table.insert(result,hash_val[i-1])
        table.insert(result,hash_val[i])
    end
end
return result



  1. Node.js &Redis; Wachten tot een lus is afgelopen

  2. Afbeeldingen opslaan in een MongoDB-database

  3. Hoe een mangoestschema te maken met een reeks object-ID's?

  4. node.js slaat objecten op in redis