使用Redis JSON包更新多个异构键的语法是什么?

fjaof16o  于 2022-10-31  发布在  Redis
关注(0)|答案(1)|浏览(122)

我有一个使用Redis JSON NPM包的Node.JS应用程序,我知道我可以使用JsonPath模式更新多个键,就像Redis JSON文档显示的那样:

redis> JSON.SET doc $ '{"f1": {"a":1}, "f2":{"a":2}}'
OK
redis> JSON.SET doc $..a 3
OK
redis> JSON.GET doc
"{\"f1\":{\"a\":3},\"f2\":{\"a\":3}}"

但是,只有当您更新具有公共名称的键,并且路径模式(“$.. a”)匹配多个键时,这种方法才有效。是否有一种方法可以使用相同的SET命令但使用独立路径列表来更新多个键?例如,类似于以下内容:

await self.redisClient.json.set(
                redisKey,
                ["$.key_1", "$.key_2", "$.key_3"],
                valueToAssign,
                {
                    NX: true
                }
            )

其中,值“valueToAssign”将被分配给顶级键:“key_1”、“key_2”和key_3”?上面的示例使用了NX选项,因此我希望仅对那些尚不存在的键进行赋值。

rks48beu

rks48beu1#

如果这些键位于同一父项下,则可以使用JSONPath union运算符(使用逗号),例如(使用CLI),同时设置$.a$.b的值:

127.0.0.1:6379> JSON.SET test $ '{"a":10, "b":20, "c":30}'
OK
127.0.0.1:6379> JSON.GET test '$.["a","b"]'
"[10,20]"
127.0.0.1:6379> JSON.SET test '$.["a","b"]' 50
OK
127.0.0.1:6379> JSON.GET test $
"[{\"a\":50,\"b\":50,\"c\":30}]"

除此之外,目前,您可以使用MULTIEXEC在单个事务中调用多个JSON.SET
另请参阅https://github.com/RedisJSON/RedisJSON/issues/414

相关问题