Java - 按多个属性过滤 JSON 个对象的数组
Java - Filtering an array of JSON objects by multiple properties
我有一个像这样存储在 Cloudant 中的对象:
{
"attr1": "value",
"Objects": [{
"code": "v1",
"allowNull": "true",
"country": "BE"
},
{
"code": "v2",
"allowNull": "false",
"country": "EG"
}
]
}
而且我想通过 code/country 做一个过滤条件,所以输出将只是对象列表中的一个对象。
有没有办法从 Cloudant 方面做到这一点?或者在 Java 端完成的有效方法?
您可以使用 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"}}
]}
我有一个像这样存储在 Cloudant 中的对象:
{
"attr1": "value",
"Objects": [{
"code": "v1",
"allowNull": "true",
"country": "BE"
},
{
"code": "v2",
"allowNull": "false",
"country": "EG"
}
]
}
而且我想通过 code/country 做一个过滤条件,所以输出将只是对象列表中的一个对象。
有没有办法从 Cloudant 方面做到这一点?或者在 Java 端完成的有效方法?
您可以使用 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"}}
]}