как получить дочерний элемент родителя в запросе n1ql - PullRequest
1 голос
/ 31 мая 2019

Я планирую получить дочерние элементы родительского элемента на основе некоторых условий.Как я могу получить его, находясь внутри массива объектов массива.

SELECT ARRAY {s.name,s.id} FOR s IN t.countryDetails.stateInfo END AS stateDetails
FROM test AS t 
WHERE t.type = "countries" and t.countryDetails.name = 'US';

Это фактический документ JSON, который я пытаюсь запросить:

{
   "type":"countries",
   "docName":"CountryData",
   "countryDetails":[
      {
         "name":"US",
         "code":"+1",
         "stateInfo":[
            {
               "name":"Florida",
               "id":"1212"
            },
            {
               "name":"NewYork",
               "id":"1214"
            }
         ]
      },
       {
         "name":"France",
         "code":"+33",
         "stateInfo":[
            {
               "name":"Grand Est",
               "id":"5212"
            },
            {
               "name":"Brittany",
               "id":"5214"
            }
         ]
      }
   ]
}

Я ожидаю следующий выводвывести только данные о состоянии страны в США:

[
            {
               "name":"Florida",
               "id":"1212"
            },
            {
               "name":"NewYork",
               "id":"1214"
            }
         ] 

1 Ответ

1 голос
/ 31 мая 2019

Если у вас в ConutryDetails есть одна запись для каждой страны, используйте следующее

SELECT FIRST s.stateInfo FOR IN t.countryDetails WHEN s.name = "US" END AS stateDetails
FROM test AS t 
WHERE t.type = "countries" 
      AND ANY v IN t.countryDetails SATISFIES v.name = 'US' END;

ИЛИ

SELECT cd.stateInfo AS stateDetails
FROM test AS t
UNNEST t.countryDetails AS cd
WHERE t.type = "countries" AND cd.name = 'US';
...