zrangebyscore
1. 基本語法
zrangebyscore(key
, min:<number|string>
, max:<number|string>
, ['WITHSCORES']
, ['LIMIT', offset, count]
, callback
)
key
, min:<number|string>
, max:<number|string>
, ['WITHSCORES']
, ['LIMIT', offset, count]
, callback
) 於有序集合中,篩選分數範圍介在min
與max
之間的成員,根據分數「由小到大」回傳成員名單(這點與zrevrangebyscore相反)。可再透過WITHSCORES
參數同時回傳成員及分數;或根據LIMIT
參數,透過偏移位置offset
與數量count
篩選區間成員。
特殊字串
適用參數
功能
-Inf
min
對應分數為負無限小
Inf 或 +inf
max
對應分數為正無限大
(
min
、max
預設分數區間包含邊界值(閉集合); 加「 ( 」則區間將不包含邊界值(開集合)
2. 範例
(1) 創建一組分數不完全相同的有序集合
client.del('zset:1');
const key1 = 'zset:1'
const members1 = ['c', 'a', 'C', 'A', 'B', 'b'];
const scores1 = [-2, -1, 0, 0, 1, 2];
members1.forEach((mem, ind) => {
client.zadd(key1, scores1[ind], mem);
})
client.zrange(key1, 0, -1, 'WITHSCORES', (err, obj) =>{
console.log(key1, ':', obj);
});
zset:1 : ['c', '-2', 'a', '-1', 'A', '0', 'C', '0', 'B', '1', 'b', '2']
(2) 篩選分數範圍:分數大於等於0以上的所有成員
client.zrangebyscore(key1, 0, 'inf', (err, obj) =>{
console.log(key1, ':', obj);
});
成員
c
a
A
C
B
b
分數
-2
-1
0
0
1
2
zset:1 : [ 'A', 'C', 'B', 'b' ]
(3) 透過LIMIT參數進一步擷取區間成員:
client.zrangebyscore(key1, '(-1', '2', 'LIMIT', 1, 2, (err, obj) =>{
console.log(key1, ':', obj);
});
成員
c
a
A
C
B
b
分數
-2
-1
0
0
1
2
(-1, 2]
x
x
o
o
o
o
offset = 1
x
x
0
1
2
3
count = 2
x
x
-
o
o
-
zset:1 : [ 'C', 'B' ]
Last updated
Was this helpful?