gpt4 book ai didi

azure - Cosmos SQL 查询

转载 作者:行者123 更新时间:2023-12-03 04:12:42 26 4
gpt4 key购买 nike

我已阅读 Azure cosmos 文档,目前它表示不允许在同一数据库中加入 2 个不同的集合。我需要帮助来实现以下场景。以下是 Cosmos DB 中的文档。我正在使用 SQL API 来实现同样的目的。

以下所有文档均位于同一集合中。 'id' 是分区键

文档 1:

{
"id": "12343920",
"status": "1",
"code": "111116"
}

文档 2:

{
"id": "12343921",
"status": "8",
"code": "111117"
}

文档3:[与其他文档不同]

{
"id": "active",
"Part": [
{
"Name": "ABC",
"Status": [
"1",
"2",
"3"
]
},
{
"Name": "DEF",
"Status": [
"6",
"2",
"8"
]
}
],
}

我有一个存储过程,其中 API 带有 3 个参数,

  • ID
  • 代码
  • 姓名

我需要从文档 3 中查找相应名称 [ from API ] 的状态,然后需要在其他文档中应用 IN 子句来查找匹配的响应。

我尝试了如下几个查询。

我尝试从文档3获取状态的字符串数组:

SELECT Value t.Status
from f
JOIN t in f.Part
where t.Name=@Name

此查询在 SQL 编辑器中有效[如果我用 ABC 替换 @Name],但在存储过程中执行时不显示任何文档。

其他代码:

SELECT n.id,n.code,n.Status
FROM order n
where n.Code=@Code
and n.id=@id and n.Status IN (
SELECT ARRAY(
SELECT Part.Status
FROM Part
in order.Part
WHERE Part.Name=@Name)
FROM orders WHERE orders.id='active')

它在 SELECT 语句附近显示错误

我期望的结果如下,它与 API 中的参数相匹配。

{
"id": "12343920",
"status": "1",
"code": "111116"
}

最佳答案

根据这个case ,cosmos db 目前不支持子查询,所以在 SELECT 语句附近提示错误。

为了达到您的要求,我建议您使用双sql查询。

第一个sql选择Status数组过滤条件。

SELECT value t.Status from f JOIN t in f.Part where t.Name= @Name

第二条sql将状态与过滤条件进行匹配。

SELECT f.id,f.code,f.status from f where IS_DEFINED (f.Part) = false 
and ARRAY_CONTAINS(@STATUS,f.status,false)

关于azure - Cosmos SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55487306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com