操作 Redis JSON 中的嵌套对象数组
Manipulating nested array of obects in RedisJSON
我有一个 JSON 嵌套数组,如下所示,要保存在 Redis 中。我正在使用 RedisJSON 模块将数据保存为 JSON.
customer:12345 : {
info : {
key1: val1,
key2: val2,
key3: val3
},
rides: [
{
rideid: xxx,
from: fromval,
to: toval,
date: dateofride,
distance: distanceval,
points: pointsval
},
{
rideid: yyy,
from: fromval,
to: toval,
date: dateofride,
distance: distanceval,
points: pointsval
},
...
]
}
我有一种情况,可以将新项目添加到数组或可以编辑现有项目。我正在使用 express.js 的 node-redis 客户端。 Express 应用仅接收在 rides 数组中更改或添加的数据。如果该项目已经在数组中,则新数据必须替换现有的数组项目(rideid 是每个对象的键),否则必须将其添加到数组中。我该如何实现?
给定以下 JSON 文档
{
"info": {
"key1": "val1"
},
"rides": [{
"rideid": "xxx",
"points": 0
},
{
"rideid": "yyy",
"points": 10
}
]
}
在 RedisJSON 中由键 customer:12345
持有,使用以下命令
127.0.0.1:6379> JSON.SET customer:12345 . "{\"info\": {\"key1\": \"val1\",\"key2\": \"val2\",\"key3\": \"val3\"},\"rides\":[{\"rideid\": \"xxx\",\"points\": 0 },\t{\"rideid\": \"yyy\",\"points\": 10}]}"
您可以使用 rideid yyy
更新行程,例如按如下方式将分数增加 5
127.0.0.1:6379> JSON.NUMINCRBY customer:12345 "$.rides[?(@.rideid=='yyy')].points" 5
"[15]"
$.rides[?(@.rideid=='yyy')].points
是一个JSON路径表达式(更多here and here and also answered )
添加新行程
127.0.0.1:6379> JSON.ARRAPPEND customer:12345 $.rides "{\"rideid\": \"zzz\",\"points\": 5 }"
1) (integer) 3
所有RedisJSON命令都可以找到here
我有一个 JSON 嵌套数组,如下所示,要保存在 Redis 中。我正在使用 RedisJSON 模块将数据保存为 JSON.
customer:12345 : {
info : {
key1: val1,
key2: val2,
key3: val3
},
rides: [
{
rideid: xxx,
from: fromval,
to: toval,
date: dateofride,
distance: distanceval,
points: pointsval
},
{
rideid: yyy,
from: fromval,
to: toval,
date: dateofride,
distance: distanceval,
points: pointsval
},
...
]
}
我有一种情况,可以将新项目添加到数组或可以编辑现有项目。我正在使用 express.js 的 node-redis 客户端。 Express 应用仅接收在 rides 数组中更改或添加的数据。如果该项目已经在数组中,则新数据必须替换现有的数组项目(rideid 是每个对象的键),否则必须将其添加到数组中。我该如何实现?
给定以下 JSON 文档
{
"info": {
"key1": "val1"
},
"rides": [{
"rideid": "xxx",
"points": 0
},
{
"rideid": "yyy",
"points": 10
}
]
}
在 RedisJSON 中由键 customer:12345
持有,使用以下命令
127.0.0.1:6379> JSON.SET customer:12345 . "{\"info\": {\"key1\": \"val1\",\"key2\": \"val2\",\"key3\": \"val3\"},\"rides\":[{\"rideid\": \"xxx\",\"points\": 0 },\t{\"rideid\": \"yyy\",\"points\": 10}]}"
您可以使用 rideid yyy
更新行程,例如按如下方式将分数增加 5
127.0.0.1:6379> JSON.NUMINCRBY customer:12345 "$.rides[?(@.rideid=='yyy')].points" 5
"[15]"
$.rides[?(@.rideid=='yyy')].points
是一个JSON路径表达式(更多here and here and also answered
添加新行程
127.0.0.1:6379> JSON.ARRAPPEND customer:12345 $.rides "{\"rideid\": \"zzz\",\"points\": 5 }"
1) (integer) 3
所有RedisJSON命令都可以找到here