Couchbase N1QL - 使用键嵌套数组

标签 couchbase n1ql nested-queries

我是 Couchbase 和 N1QL 语法的新手,我遇到了一个问题。 假设我们有 3 种类型的文档:

类型 A 的 Doc1,key = typeA:Doc1

{
  "type": "typeA"
  "id": "Doc1",
  "sequences": [
    "typeB:Doc2"
  ]
}

类型 B 的 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';

关于Couchbase N1QL - 使用键嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66174190/

相关文章:

Couchbase - 智能跨数据中心复制(XCDR)

f# - 使用 N1QL 查询 Couchbase

mongodb - CouchBase NOSQL 宣布支持 JOIN。使用它们有什么缺点?

MYSQL 在带计数的子查询后插入

sql - 如何将第一个查询的输出(有两个值)作为第二个查询的输入?

java - Dropwizard Spring 数据库

IOS Swift Cocoapods - 安装和使用 couchbase 库

java - 在 couchbase N1Ql @query 中使用 IN 子句或使用 couchbase JPA 中的 findAll(keys)

java - 选择文件路径字符串返回空 N1QL 查询