我读过Azure cosmos文档,它现在说它不允许在同一个DB中加入两个不同的集合。我需要帮助,以实现以下情况。以下是宇宙数据库中的文档。我也在使用SQL。
以下所有文档都在同一个集合中。‘'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如果我用ABC替换@Name,但在存储过程中执行时没有显示文档,则此查询在SQL编辑器中工作。
其他代码:
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"
}发布于 2019-04-03 06:10:11
根据这个案例,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)https://stackoverflow.com/questions/55487306
复制相似问题