You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RedisJSON MGET获取多个键的指定属性?

解决RedisJSON批量获取多个对象指定属性的问题

问题原因

JSON.MGET的语法规则是:键列表之后只能传入单个路径参数,你之前传入.name和.color两个路径的写法不符合命令格式,因此无法正常执行。

解决方案

方案1:使用多属性选择的JSONPath表达式

利用RedisJSON支持的JSONPath语法,通过单个路径表达式同时指定多个需要获取的属性:

方式A:返回属性值数组
JSON.MGET Cat:1 Cat:2 '$["name","color"]'

返回结果示例:

1) ["Mitzi", "pink"]
2) ["Lucky", "black"]
方式B:返回结构化对象

如果希望保留属性名,返回完整的对象结构,可以使用JSONPath的对象投影语法:

JSON.MGET Cat:1 Cat:2 '${"name":$.name, "color":$.color}'

返回结果示例:

1) {"name":"Mitzi","color":"pink"}
2) {"name":"Lucky","color":"black"}

也可以使用RedisJSON简化的路径写法,效果和方式A一致:

JSON.MGET Cat:1 Cat:2 '{.name, .color}'

方案2:使用Lua脚本批量处理

如果需要更灵活的输出格式,或者你的RedisJSON版本不支持上述JSONPath语法,可以通过Lua脚本实现批量查询:

local result = {}
for _, key in ipairs(KEYS) do
    local name = redis.call('JSON.GET', key, '.name')
    local color = redis.call('JSON.GET', key, '.color')
    table.insert(result, string.format('{"name":%s, "color":%s}', name, color))
end
return result

执行脚本的命令:

EVAL "local result = {} for _, key in ipairs(KEYS) do local name = redis.call('JSON.GET', key, '.name') local color = redis.call('JSON.GET', key, '.color') table.insert(result, string.format('{\"name\":%s, \"color\":%s}', name, color)) end return result" 2 Cat:1 Cat:2

返回结果示例:

1) "{\"name\":\"Mitzi\",\"color\":\"pink\"}"
2) "{\"name\":\"Lucky\",\"color\":\"black\"}"

内容的提问来源于stack exchange,提问作者marina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:47:18