如何在Fabric的CouchDB中查询JSON结构内的access对象
错误原因
你的现有查询逻辑不匹配数据结构:access数组的每一项都是包含权限键值对的对象,而非直接存储create这类字符串,因此用$eq: "create"匹配字符串无法命中任何记录。
正确查询语句
根据你的查询需求分以下场景:
- 查询包含
create权限字段(任意权限值)的记录
使用$exists判断对象中是否存在对应权限键:
{ "selector": { "Company": { "Associate": { "access": { "$elemMatch": { "create": { "$exists": true } } } } } } }
- 查询
create权限值为allowed的记录
直接在$elemMatch中匹配键值对即可:
{ "selector": { "Company": { "Associate": { "access": { "$elemMatch": { "create": "allowed" } } } } } }
- 查询同时包含
create和readonly两个权限的记录
用$and组合多个匹配条件:
{ "selector": { "$and": [ { "Company.Associate.access": { "$elemMatch": { "create": { "$exists": true } } } }, { "Company.Associate.access": { "$elemMatch": { "readonly": { "$exists": true } } } } ] } }
注意事项
如果链码部署后查询无返回,需要确认你已经为查询字段创建了CouchDB索引,否则Fabric会默认禁止全表扫描类的查询。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

