我有一个带有嵌套数组的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的节点-redis客户机。Express应用程序只接收被修改或添加到游戏机数组中的数据。如果项已经在数组中,则新数据必须替换现有的数组项(rideid是每个对象的关键),否则必须将其添加到数组中。我怎样才能做到这一点?
发布于 2022-01-10 23:24:55
给定以下JSON文档
{
"info": {
"key1": "val1"
},
"rides": [{
"rideid": "xxx",
"points": 0
},
{
"rideid": "yyy",
"points": 10
}
]
}它由RedisJSON中的键RedisJSON使用以下命令保存
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是一个JSONPath表达式(更多的是这里和这里,同时也回答了这里)
增加一个新的骑行
127.0.0.1:6379> JSON.ARRAPPEND customer:12345 $.rides "{\"rideid\": \"zzz\",\"points\": 5 }"
1) (integer) 3所有RedisJSON命令都可以找到这里
https://stackoverflow.com/questions/70640933
复制相似问题