N1ql SUM в массиве UNNEST

N1ql SUM в массиве UNNEST

У меня есть одна корзина (Couchbase Community edition 6.5), состоящая из следующих документов:

FishingDoc

{
    "boatIds": ["boatId_1","boatId_2","boatId_3"],
    "areaIds": ["areaId_1","areaId_2","areaId_3"],
    "total": 10,
    "date": "2021-05-13T00:00:00Z",
    "type": "fishing"
},
{
    "boatIds": ["boatId_1","boatId_3"],
    "areaIds": ["areaId_2","areaId_3"],
    "total": 25,
    "date": "2021-05-15T00:00:00Z",
    "type": "fishing"
}

RiverDoc

{
    "_id": "areaId_1",
    "size": 5,
    "type": "river"
},
{
    "_id": "areaId_1",
    "size": 10,
    "type": "river"
},
{
    "_id": "areaId_1",
    "size": 15,
    "type": "river"
}

BoatDoc

{
    "_id": "areaId_1",
    "name": "Small Boat",
    "type": "boat"
},
{
    "_id": "areaId_1",
    "name": "Medium Boat",
    "type": "boat"
},
{
    "_id": "areaId_1",
    "name": "Large Boat",
    "type": "boat"
}

Мне нужен запрос, где я могу разбить всю рыболовную документацию по реке и лодке. Я получил это с помощью оператора UNNEST в следующем запросе:

SELECT river.size,
        boat.name,
        fishing.total
FROM bucket_name fishing
UNNEST fishing.riverIds AS river
UNNEST fishing.boatIds AS boat
WHERE fishing.type = "fishing"

Но проблема в этом запросе заключается в том, что общее значение в приведенном выше запросе является общим для всего объекта рыбной ловли.

Мне нужно получить общую сумму относительно размера не вложенной реки. Итак, мне нужно объединить и просуммировать все реки для объекта рыбной ловли и получить размер конкретной реки по отношению к общему количеству.

Вот оператор select, который я имел в виду, но понятия не имел, как на самом деле написать правильный запрос:

SELECT river.size,
        boat.name,
        river.size/SUM( fishing.riverIds[0].size, fishing.riverIds[1].size, fishing.riverIds[2].size ) * fishing.total
FROM bucket_name fishing
UNNEST fishing.riverIds AS river
UNNEST fishing.boatIds AS boat
WHERE fishing.type = "fishing"

person Johan Ferreira    schedule 13.05.2021    source источник
comment
ключ документа такой же, как _id, Также лодка, reviver имеет все areaId_1, это опечатка. Есть ли отношения между массивами boatIds, areaIds   -  person vsr    schedule 13.05.2021
comment
river.size / ARRAY_SUM (fishing.riverIds [*]. size) * fishing.total   -  person vsr    schedule 13.05.2021


Ответы (1)


person    schedule
comment
Большое спасибо! Второй запрос выполнил свою работу! Отличная идея выбрать значения размера в операторе FROM, а затем просто суммировать их в SELECT! - person Johan Ferreira; 14.05.2021