使用Cosmos Client返回Azure Cosmos项目的平面层次结构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Cosmos Client返回Azure Cosmos项目的平面层次结构相关的知识,希望对你有一定的参考价值。

在Azure Cosmos容器中保存了检查项目,每个检查可能具有嵌套的检查。 (请参见下面的JSON示例)。

如何使用Cosmos Client查询给定患者的所有检查,并以统一的层次结构返回所有检查?

对于给定的示例,返回的对象应类似于:

Exam#1
Exam#2
Exam#3

为了澄清:关系数据库中的等效项具有检查表,我将在该表中查询患者检查使用'SELECT * from WHERE(病人= Patient#1)'

{
    "patient": {
        "$id": "1",
        "Name": "Patient#1",
        "id": "Exam#1"
    },
    "examinations": [
        {
            "patient": {
                "$ref": "1"
            },
            "examinations": [],
            "id": "Exam#2"
        },
        {
            "patient": {
                "$ref": "1"
            },
            "id": "Exam#3"
        }
    ],
}
答案

在您给出的示例中,嵌套检查为空。因此,您可以尝试以下sql:

SELECT ARRAY_CONCAT(Array(SELECT value c.patient.id from c where c.patient.Name = "Patient#1"),Array(select value e.id from c join e in c.examinations where c.patient.Name = "Patient#1")) AS result FROM c

这里是结果:

[
    {
        "result": [
            "Exam#1",
            "Exam#2",
            "Exam#3"
        ]
    }
]

如果嵌套检查为空(我将一个简单的数据添加到ID为Exam#4的嵌套检查中,则可以尝试以下sql:

select ARRAY_CONCAT(Array(select value c.patient.id from c where c.patient.Name = "Patient#1"),Array(select value e.id from c join e in c.examinations where c.patient.Name = "Patient#1"),Array(SELECT value a.id from c join e in c.examinations join a in e.examinations where c.patient.Name = "Patient#1")) AS result from c

这里是结果:

[
    {
        "result": [
            "Exam#1",
            "Exam#2",
            "Exam#3",
            "Exam#4"
        ]
    }
]

顺便说一句,我尝试了几个SQL,我想得到这样的结果:

[
    "Exam#1",
    "Exam#2",
    "Exam#3",
    "Exam#4"
]

但是我失败了,这似乎不可能。

希望这些可以帮助您。

以上是关于使用Cosmos Client返回Azure Cosmos项目的平面层次结构的主要内容,如果未能解决你的问题,请参考以下文章

azure cosmos db 在 mongodb.com 中创建了集合

azure cosmos db 在 mongodb.com 中创建了集合

带有 Cosmos DB 绑定的 Azure 函数返回格式化的 DateTime?

如何从 Service Fabric Mesh 连接到 Azure Cosmos DB

Azure 函数:如何将 http 触发器函数的查询字符串参数绑定到 Cosmos DB 的 SQL 查询

无法使用 Microsoft.EntityFrameworkCore.Cosmos 连接到 Azure Cosmos Db 帐户 - 响应状态代码