【问题标题】:Complex N1QL query in CoucbbaseCoucbbase 中的复杂 N1QL 查询
【发布时间】:2018-01-11 08:04:33
【问题描述】:

我在名为“实体”的同一个存储桶中的沙发库中有以下两种类型的文档:

{
  "documentType": "person",
  "id": "4f3567cd-782d-4456-aabd-ff5faf071476",
  "personal": {
    "gender": "Male",
    "dob": "1984-05-22",
    "firstName": "Peter",
    "lastName": "Smith",
    "idNumber": "4915040000111"
  }
}

和:

{
    "id": "09690237-9ef5-4381-93dc-7312f7417f82",
    "documentType": "link",
    "entities": [
        {
            "id": "000151ef-f4b9-4cd4-bf3b-d5b07d79ed20",
            "type": "parent",
        },
        {
            "id": "000151ef-f4b9-4cd4-bf3b-d5b07d79ed21",
            "type": "child"
        }

    ]
}

person 文档描述了一个人,而链接表定义了人与人之间的链接。父母可以有多个孩子,并且父母将为他拥有的每个孩子都有一个链接文档。

问题:给定一个父母 id,返回该父母的每个孩子的所有个人信息,例如。

[
    {
        "id": "000151ef-f4b9-4cd4-bf3b-d5b07d79ed21",
        "personal": {
            "gender": "Male",
            "dob": "2004-05-22",
            "firstName": "Chris",
            "lastName": "Smith",
            "idNumber": "0415050000111"
        }
    },
    {
        ...
    }
]

到目前为止:我能够使用以下方法获取所有子 ID 的列表:

select array_flatten(array_agg(array entity.id for entity in entities.entities when entity.type = 'parent' end), 3) as entity
from entities
where entities.docuementType = 'link'
      and any entity within entities satisfies entity.id = '01f6a9eb-0d7e-4495-a90f-f96a38aef621'
                                               and entity.type='parent' end

但是,couchbase 似乎无法对子查询执行连接。有没有办法使用 N1QL 来完成?目前我唯一的解决方案是获取 ID 列表,然后运行另一个查询来获取孩子。

【问题讨论】:

    标签: couchbase n1ql


    【解决方案1】:
    SELECT p
    FROM entities AS l 
    JOIN entities AS p 
    ON KEYS ARRAY e.id FOR e IN l.entities WHEN e.type = "child" END
    WHERE l.docuementType = 'link'
          AND ANY entity IN l.entities 
                  SATISFIES entity.id = '01f6a9eb-0d7e-4495-a90f-f96a38aef621'
                           AND entity.type='parent' END
    

    【讨论】:

    • 这很完美——正是需要的。我知道我们不应该在 SO 上说“谢谢”,但是亲爱的程序员,如果你在附近,我会给你买一瓶啤酒(做两瓶),如果你不喝熊,那么你选择任何饮料。谢谢!
    猜你喜欢
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2020-04-06
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多