问题描述
我是 Couchbase 和 N1QL 语法的新手,我遇到了一个问题。 假设我们有 3 种类型的文档:
TypeA 的 Doc1,key = typeA:Doc1
{
"type": "typeA"
"id": "Doc1","sequences": [
"typeB:Doc2"
]
}
TypeB 的 Doc2,key = typeB:Doc2
{
"id": "Doc2","processors": [
{
"order": 1,"id": "typeC:Doc3"
}
]
}
TypeC 的 Doc3,key = typeC:Doc3
{
"id": "Doc3","prop": "value"
}
我想要实现的是通过它们的文档键嵌套这 3 个对象,以便拥有具有这种结构的唯一文档:
{
"id": "Doc1","sequences": [
{
"id": "Doc2","processors": [
{
"order": 1,"id": "Doc3","prop": "value"
}
]
}
]
我所做的是嵌套前两个文档以获得部分结果。但我正在尝试整合第三个文档。
这是我的尝试:
SELECT dev.*,ARRAY sq_i FOR sq_i IN prseq END AS sequences
FROM data dev
nesT data prseq ON KEYS dev.sequences
WHERE dev.type = 'TypeA'
谁能帮我进行第三级嵌套? 谢谢。
解决方法
使用子查询
SELECT dt.*,(SELECT ds.*,(ARRAY OBJECT_ADD((SELECT RAW dp FROM data AS dp USE KEYS v.id)[0],"order",v.`order`)
FOR v IN ds.processors
END) AS processors
FROM data AS ds USE KEYS dt.sequences) AS sequences
FROM data AS dt
WHERE dt.type = 'TypeA';