Я изо всех сил пытаюсь выполнить запросы на соединение между двумя типами документов в одном ведре в Couchbase.
Подробности: Название сегмента: lifext-stage
ВАЖНОЕ ПРИМЕЧАНИЕ. Оба документа находятся в одной корзине, но оба документа имеют поле разного типа, которое можно использовать для их идентификации при запросе.
В первом Doument в поле type
установлено значение moment
Во втором документе в поле type
установлено значение user
.
Схема первого документа:
{
"allCongrats": [
{
"congratulatory": "“The invariable mark of wisdom is to see the miraculous in the common.” -Ralph Waldo Emerson",
"orderedId": 14
}
],
"congratulatory": null,
"cueRecommendations": [
{
"iconName": "Waking_Up",
"recommendation": "Waking Up"
},
],
"deliveryMethod": "audio",
"description": "Complete a 60-second practice for unwinding stress by taking in the good",
"duration": 60000,
"effort": "med",
"id": "moment-82435b7dca1eff75066b14a7c47ac046",
"moduleId": "module-48f41a55ab24166c7ab1d1d8d825c776",
"moduleType": "CULTIVATE_OPTIMISM",
"orderedId": 1,
"practice": "Gratitude",
"textDuration": "60 sec",
"title": "60 Seconds of Optimism",
"type": "moment"
}
Схема второго документа:
{
"assessments": [],
"cohortId": "cohort-a855864e-12b9-4e34-bd1f-2a89e581de1b",
"dashboardIntroSeen": false,
"email": "[email protected]",
"firstAssessmentCompleted": false,
"firstName": "Phil",
"focusId": null,
"id": "user-00259a727b52cf35595e175134f49584",
"lastName": "Ros",
"longestStreak": 0,
"modules": [],
"moments": [
{
"completedDates": null,
"lastCompletedMomentDate": null,
"lastCongratulatoryId": null,
"moduleId": "module-48f41a55ab24166c7ab1d1d8d825c776",
"momentId": "moment-82435b7dca1eff75066b14a7c47ac046",
"orderedId": 0,
"userMomentId": "userMoment-58445416-9878-45d9-8221-6d6f76bf0a42"
}
],
"organizationId": "organization-fd779338-1361-4789-8da8-1ea37b0a3906",
"signupTs": "2017-11-29T19:49:25.613Z",
"streak": 0,
"tokenValidator": "d9dcf699c23bacd33d6d841c454447d375990c51daa109cd5ffa5ff29bc7e6b0b76a26825267efb6b6873533ae711f82",
"type": "user"
}
Как видите, во втором документе есть массивы моментов, которые содержат ключ momentId
. Этот momentId
ключ соответствует ключу id
в первом документе.
Я хочу объединить каждый элемент моментов во втором документе с первым документом и вернуть результат.
Ожидаемый результат для этого примера:
{
"allCongrats": [
{
"congratulatory": "“The invariable mark of wisdom is to see the miraculous in the common.” -Ralph Waldo Emerson",
"orderedId": 14
}
],
"congratulatory": null,
"cueRecommendations": [
{
"iconName": "Waking_Up",
"recommendation": "Waking Up"
},
],
"deliveryMethod": "audio",
"description": "Complete a 60-second practice for unwinding stress by taking in the good",
"duration": 60000,
"effort": "med",
"id": "moment-82435b7dca1eff75066b14a7c47ac046",
"moduleId": "module-48f41a55ab24166c7ab1d1d8d825c776",
"moduleType": "CULTIVATE_OPTIMISM",
"orderedId": 1,
"practice": "Gratitude",
"textDuration": "60 sec",
"title": "60 Seconds of Optimism",
"type": "moment",
"completedDates": null,
"lastCompletedMomentDate": null,
"lastCongratulatoryId": null,
"momentId": "moment-82435b7dca1eff75066b14a7c47ac046",
"orderedId": 0,
"userMomentId": "userMoment-58445416-9878-45d9-8221-6d6f76bf0a42"
}
Вот некоторые из запросов, которые я пробовал, но не дал результатов:
SELECT *
FROM (SELECT um
FROM `lifext-stage` a
UNNEST a.moments as um
WHERE a.type="user") as u
INNER JOIN `lifext-stage` m
ON u.um.momentId = m.id
WHERE m.type="moment"
Приведенный выше запрос дает мне следующую ошибку:
[
{
"code": 3000,
"msg": "syntax error - at u",
"query_from_user": "SELECT *\nFROM (SELECT um\nFROM `lifext-stage` a \nUNNEST a.moments as um\nWHERE a.type=\"user\") as u\nINNER JOIN `lifext-stage` m\nON u.um.momentId = m.id\nWHERE m.type=\"moment\""
}
]
Второй запрос, который я пробовал:
SELECT g.*, ARRAY_AGG({"node":n, "data":d}) AS node_data
FROM `lifext-stage` AS g UNNEST g.moments AS n JOIN `lifext-stage` AS d ON n.momentId = d.id
WHERE g.type="user" AND d.type="moment"
Я борюсь с этим последние два дня, любая помощь в этом отношении будет очень признательна. Заранее спасибо :)