我已经阅读了Azure宇宙文档,目前它说不允许在同一数据库中加入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个参数,
我需要从文档3中找到相应的名称[来自API]的状态,然后需要在其他文档中应用IN子句以找到匹配的响应。
我尝试了以下几个查询。
我试图从文档3 获取状态字符串字符串:
SELECT Value t.Status
from f
JOIN t in f.Part
where t.Name=@Name
此查询在SQL编辑器中有效[如果我将@Name替换为ABC,但在存储过程中执行时则不显示文档。
其他代码 :
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"
}
答案 0 :(得分:0)
根据此case,cosmos db目前尚不支持子查询,因此它在SELECT语句附近显示错误。
为达到您的要求,我建议您使用双SQL查询。
第一个选择状态数组过滤条件的sql。
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)