首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询Cosmos SQL

查询Cosmos SQL
EN

Stack Overflow用户
提问于 2019-04-03 04:50:57
回答 1查看 429关注 0票数 1

我读过Azure cosmos文档,它现在说它不允许在同一个DB中加入两个不同的集合。我需要帮助,以实现以下情况。以下是宇宙数据库中的文档。我也在使用SQL。

以下所有文档都在同一个集合中。‘'id’是分区键

文档1:

代码语言:javascript
复制
{
    "id": "12343920",
    "status": "1",
    "code": "111116"
}

文档2:

代码语言:javascript
复制
{
    "id": "12343921",
    "status": "8",
    "code": "111117"
}

文档3:与其他文档不同

代码语言:javascript
复制
{
    "id": "active",
    "Part": [
        {
            "Name": "ABC",
            "Status": [
                "1",
                "2",
                "3"
            ]
        },
        {
            "Name": "DEF",
            "Status": [
                "6",
                "2",
                "8"
            ]
        }
    ],
}

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

  • id
  • 代码
  • 名字

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

我尝试了几个查询,如下所示.

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

代码语言:javascript
复制
SELECT Value t.Status
from f
JOIN t in f.Part
where t.Name=@Name

如果我用ABC替换@Name,但在存储过程中执行时没有显示文档,则此查询在SQL编辑器中工作。

其他代码

代码语言:javascript
复制
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中的参数。

代码语言:javascript
复制
{
    "id": "12343920",
    "status": "1",
    "code": "111116"
}
EN

回答 1

Stack Overflow用户

发布于 2019-04-03 06:10:11

根据这个案例,cosmos db到目前为止不支持子查询,因此它表示SELECT语句附近有错误。

为了实现您的需求,我建议您使用双sql查询。

首先,sql选择状态数组筛选条件。

代码语言:javascript
复制
SELECT value t.Status from f JOIN t in f.Part where t.Name= @Name

第二,sql将状态与筛选条件匹配。

代码语言:javascript
复制
SELECT f.id,f.code,f.status from f where IS_DEFINED (f.Part) = false 
and ARRAY_CONTAINS(@STATUS,f.status,false)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55487306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档