使用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 帐户 - 响应状态代码