der*_*can 2 javascript nosql redis node.js
目前,我正在尝试更新已排序的集合成员。查看文档,使用ZADD似乎可以更新成员(如果其分数已经存在)。但是,使用此代码尝试更新成员时,
db.zadd("users", parseInt(key, 10) + 1, JSON.stringify(newData));
Run Code Online (Sandbox Code Playgroud)
....即使分数已经存在,也会添加一个新条目!如何使用Redis更新排序的集合成员?
@Eli 已经解释了如何更新元素分数,现在zadd添加了由 @ZettaCircl 解释的新选项,我正在解释如何使用 Score 和 element 的示例来更新元素。
将三个国家添加到排序集中
127.0.0.1:6379> zadd country nx 1 'pakistan' // nx = add new element
(integer) 1
127.0.0.1:6379> zadd country nx 2 'turkey'
(integer) 1
127.0.0.1:6379> zadd country nx 3 'UK'
(integer) 1
Run Code Online (Sandbox Code Playgroud)
获取有分数的国家
127.0.0.1:6379> zrange country 0 10 withscores
1) "pakistan"
2) "1"
3) "turkey"
4) "2"
5) "UK"
6) "3"
Run Code Online (Sandbox Code Playgroud)
更新国家
使用分数将国家巴基斯坦(元素)更新为新名称
127.0.0.1:6379> zadd country xx ch 1 'islamic republic of pakistan'
(integer) 0 // 0 means not updated
Run Code Online (Sandbox Code Playgroud)
使用元素名称(“巴基斯坦”)更新巴基斯坦的国家得分
127.0.0.1:6379> zadd country xx ch 4 'pakistan'
(integer) 1 // updated successfully
Run Code Online (Sandbox Code Playgroud)
获取有分数的国家
我们可以在这里看到我们只更新了分数。
127.0.0.1:6379> zrange country 0 10 withscores
1) "turkey"
2) "2"
3) "UK"
4) "3"
5) "pakistan"
6) "4" // score updated
Run Code Online (Sandbox Code Playgroud)
结论
我们可以使用元素名称仅更新排序集中的分数。
我们如何更新元素
首先,我们需要删除国家巴基斯坦。
127.0.0.1:6379> zrem country pakistan
(integer) 1 // removed successfully
Run Code Online (Sandbox Code Playgroud)
获取有分数的国家/地区
127.0.0.1:6379> zrange country 0 10 withscores
1) "turkey"
2) "2"
3) "UK"
4) "3"
Run Code Online (Sandbox Code Playgroud)
使用新名称添加巴基斯坦
使用新名称和以前的分数将新元素添加到国家/地区排序集中
127.0.0.1:6379> zadd country nx 1 'islamic republic of pakistan'
(integer) 1
Run Code Online (Sandbox Code Playgroud)
获取有分数的国家/地区
127.0.0.1:6379> zrange country 0 10 withscores
1) "islamic republic of pakistan"
2) "1"
3) "turkey"
4) "2"
5) "UK"
6) "3"
Run Code Online (Sandbox Code Playgroud)
结论
首先我们需要删除元素,然后将新元素添加到排序集中。
只要条目之间的键和成员匹配,ZADD将替换旧成员的分数:
redis localhost:6379> ZADD test-key 40 blah
(integer) 1
redis localhost:6379> ZRANGE test-key 0 -1 WITHSCORES
1) "blah"
2) "40"
redis localhost:6379> ZADD test-key 45 blah
(integer) 0
redis localhost:6379> ZRANGE test-key 0 -1 WITHSCORES
1) "blah"
2) "45"
Run Code Online (Sandbox Code Playgroud)
也许您在ZADD命令之间使用了不同的键或成员?
| 归档时间: |
|
| 查看次数: |
4930 次 |
| 最近记录: |