如何在 couchbase 中获取文档列表,我们必须根据属性过滤另一个数组中的数组?
how to get list of documents in couchbase where we have to filter base on attribute an array which is in another array?
"contact": {
"extendedData": [],
"id": "org_2_1084",
"organizationId": 1084,
"organizationName": "abc",
"organizationRoles": [
{
"name": "NLUZ",
"organizationRoleId": 893,
"roleSpecId": -104,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
},
{
"extendedData": [
{
"characteristicId": "1",
"characteristicValue": "M049",
"extendedDataId": "364"
},
{
"characteristicId": "2",
"characteristicValue": "ST",
"extendedDataId": "365"
}
],
"name": "SB - GULF NIGHT TECHNOTEL - LINGAYEN",
"organizationRoleId": 894,
"partyRoleAssocs": [
{
"partyRoleAssocId": "512"
}
],
"roleSpecId": -103,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
},
{
"name": "SLUZ",
"organizationRoleId": 895,
"roleSpecId": -104,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
},
{
"extendedData": [
{
"characteristicId": "1",
"characteristicValue": "M050",
"extendedDataId": "366"
},
{
"characteristicId": "2",
"characteristicValue": "ST",
"extendedDataId": "367"
}
],
"name": "adfasd",
"organizationRoleId": 896,
"partyRoleAssocs": [
{
"partyRoleAssocId": "513"
}
],
"roleSpecId": -103,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
}
],
"statusId": 1,
"statusLastChangedDate": "2019-08-04T10:14:44.697Z",
"tenantId": "2",
"type": "organization"
}
}
我必须 select 类型为组织的所有文档以及数组扩展数据中的任何 "characteristicValue" 是 "M050"。以上是示例文档结构。我如何在一个数组中搜索,该数组也是 couchbase 中另一个数组的一部分?
我试过下面的 N1ql 查询它不起作用。
SELECT *
FROM `contact`
UNNEST contacts.organizationRoles AS roles
WHERE contacts.type = "organization"
AND ANY extendedData in roles satisfies
extendeddata.characteristicValue="M050".
根据输出格式,您可以使用以下格式之一。
SELECT *
FROM `contact` AS c
UNNEST c.organizationRoles AS roles
UNNEST roles.extendedData AS e
WHERE c.type = "organization" AND e.characteristicValue = "M050";
SELECT *
FROM `contact` AS c
UNNEST c.organizationRoles AS roles
WHERE c.type = "organization" AND ANY e IN roles.extendedData SATISFIES e.characteristicValue = "M050" END;
SELECT *
FROM `contact` AS c
WHERE c.type = "organization" AND ANY roles IN c.organizationRoles
SATISFIES (ANY e IN roles.extendedData
SATISFIES e.characteristicValue = "M050" END) END;
"contact": {
"extendedData": [],
"id": "org_2_1084",
"organizationId": 1084,
"organizationName": "abc",
"organizationRoles": [
{
"name": "NLUZ",
"organizationRoleId": 893,
"roleSpecId": -104,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
},
{
"extendedData": [
{
"characteristicId": "1",
"characteristicValue": "M049",
"extendedDataId": "364"
},
{
"characteristicId": "2",
"characteristicValue": "ST",
"extendedDataId": "365"
}
],
"name": "SB - GULF NIGHT TECHNOTEL - LINGAYEN",
"organizationRoleId": 894,
"partyRoleAssocs": [
{
"partyRoleAssocId": "512"
}
],
"roleSpecId": -103,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
},
{
"name": "SLUZ",
"organizationRoleId": 895,
"roleSpecId": -104,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
},
{
"extendedData": [
{
"characteristicId": "1",
"characteristicValue": "M050",
"extendedDataId": "366"
},
{
"characteristicId": "2",
"characteristicValue": "ST",
"extendedDataId": "367"
}
],
"name": "adfasd",
"organizationRoleId": 896,
"partyRoleAssocs": [
{
"partyRoleAssocId": "513"
}
],
"roleSpecId": -103,
"statusId": 1,
"statusLastChangedDate": "2019-08-04T13:14:44.616Z"
}
],
"statusId": 1,
"statusLastChangedDate": "2019-08-04T10:14:44.697Z",
"tenantId": "2",
"type": "organization"
}
}
我必须 select 类型为组织的所有文档以及数组扩展数据中的任何 "characteristicValue" 是 "M050"。以上是示例文档结构。我如何在一个数组中搜索,该数组也是 couchbase 中另一个数组的一部分?
我试过下面的 N1ql 查询它不起作用。
SELECT *
FROM `contact`
UNNEST contacts.organizationRoles AS roles
WHERE contacts.type = "organization"
AND ANY extendedData in roles satisfies
extendeddata.characteristicValue="M050".
根据输出格式,您可以使用以下格式之一。
SELECT *
FROM `contact` AS c
UNNEST c.organizationRoles AS roles
UNNEST roles.extendedData AS e
WHERE c.type = "organization" AND e.characteristicValue = "M050";
SELECT *
FROM `contact` AS c
UNNEST c.organizationRoles AS roles
WHERE c.type = "organization" AND ANY e IN roles.extendedData SATISFIES e.characteristicValue = "M050" END;
SELECT *
FROM `contact` AS c
WHERE c.type = "organization" AND ANY roles IN c.organizationRoles
SATISFIES (ANY e IN roles.extendedData
SATISFIES e.characteristicValue = "M050" END) END;