Java - 按多个属性过滤JSON对象数组

问题描述 投票:-1回答:1

我有一个存储在Cloudant中的对象,如下所示:

{
  "attr1": "value",
  "Objects": [{
      "code": "v1",
      "allowNull": "true",
      "country": "BE"
    },
    {
      "code": "v2",
      "allowNull": "false",
      "country": "EG"
    }
  ]
}

我想按代码/国家/地区执行过滤条件,因此输出只是对象列表的一个对象。

有没有办法从Cloudant方面做到这一点?或者在Java方面有效的方法?

java json cloudant
1个回答
1
投票

您可以使用Cloudant中的map-reduce视图来实现此目的。尝试一下这样的事情:

function(doc) {
    if (doc && doc.Objects) {
        doc.Objects.forEach(function(obj) {
            emit([obj.code, obj.country], obj);
        });
    }
}

这会将Objects列表中的所有项目发送到索引中,并使用向量值键[code, country]

curl -s -XPOST -H "content-type:application/json" 'https://skruger.cloudant.com/demo/_design/query/_view/by_code_country?reduce=false' -d '{ "keys": [["v1","BE"]] }'
{"total_rows":2,"offset":0,"rows":[
    {"id":"1c593a931bcd7f0052ed8f9184810fd9","key":["v1","BE"],"value": 
        {"code":"v1","allowNull":"true","country":"BE"}}
]}

您只能使用{}通配符标记代码进行查询,例如:

curl -g 'https://skruger.cloudant.com/demo/_design/query/_view/by_code_country?reduce=false&startkey=["v1"]&endkey=["v1",{}]'
{"total_rows":2,"offset":0,"rows":[
    {"id":"1c593a931bcd7f0052ed8f9184810fd9","key":["v1","BE"],"value": 
    {"code":"v1","allowNull":"true","country":"BE"}}
]}
© www.soinside.com 2019 - 2024. All rights reserved.