zunionstore

1. 基本語法

zunionstore(destination, numkeys, key[, key, ...], ["WEIGHTS", weight[, weight, ...], ["AGGREGATE", SUM|MIN|MAX])

計算numkeys個有序集合的成員聯集,並將聯集成員新增至destination有序集合,成員若有交集,則交集成員的新分數預設為既有分數之加總SUM,可另設置每個key的加權分數weight,或另更改新分數計算方式SUM|MIN|MAX

2. 範例

(1) 先創建兩個有序集合

client.del('zset:1', 'zset:2');

const key1 = 'zset:1'
const members1 = ['A', 'B', 'C', 'D'];
const scores1 = [1, 3, 5, 7, 9];

const key2 = 'zset:2'
const members2 = ['C', 'D', 'E', 'F', 'G'];
const scores2 = [0, 2, 4, 6, 8, 10];

members1.forEach((mem, ind) => {
    client.zadd(key1, scores1[ind], mem);
})
client.zrange(key1, 0, -1, 'WITHSCORES', (err, obj) =>{
    console.log(key1, ':', obj);
});

members2.forEach((mem, ind) => {
    client.zadd(key2, scores2[ind], mem);
})
client.zrange(key2, 0, -1, 'WITHSCORES', (err, obj) =>{
    console.log(key2, ':', obj);
});
zset:1 : ['A', '1', 'B','3', 'C', '5','D', '7']

zset:2 : ['C', '0', 'D', '2', 'E', '4', 'F', '6', 'G', '8']

(2) 計算兩個有序集合的聯集

client.zunionstore('zset:union', 2, key1, key2);
client.zrange('zset:union', 0, -1, 'WITHSCORES', (err, obj) =>{
    console.log('Union : ', obj);
});

member

key1

key2

SUM

...

...

...

...

C

5

0

5

D

7

2

9

...

...

...

...

Union :  [
  'A', '1', 'B', '3',
  'E', '4', 'C', '5',
  'F', '6', 'G', '8',
  'D', '9'
]

(3) 若有交集,則交集成員分數改以「加權分數」計算

client.zunionstore('zset:union', 2, key1, key2, 'WEIGHTS', 1, 10);
client.zrange('zset:union', 0, -1, 'WITHSCORES', (err, obj) =>{
    console.log('Union : ', obj);
});

member

key1 * weight1

key2 * weight2

Weighted SUM

...

...

...

...

C

5 * 1 = 5

0 * 10 = 0

5

D

7 * 1 = 7

2 * 10 = 20

27

...

...

...

...

Union :  [
  'A', '1',  'B', '3',
  'C', '5',  'D', '27',
  'E', '40', 'F', '60',
  'G', '80'
]

(4) 若有交集,則交集成員分數改以「最小值」計算

client.zunionstore('zset:union', 2, key1, key2, 'AGGREGATE','MIN');
client.zrange('zset:union', 0, -1, 'WITHSCORES', (err, obj) =>{
    console.log('Union : ', obj);
});

member

key1

key2

MIN

...

...

...

...

C

5

0

0

D

7

2

2

...

...

...

..

Union :  [
  'C', '0', 'A', '1',
  'D', '2', 'B', '3',
  'E', '4', 'F', '6',
  'G', '8'
]

Last updated

Was this helpful?