Запрос на Космос SQL - PullRequest
       12

Запрос на Космос SQL

1 голос
/ 03 апреля 2019

Я прочитал космический документ Azure, и в настоящее время говорится, что он не позволяет присоединиться к 2 различным коллекциям в одной БД.Мне нужна помощь по достижению сценария ниже.Ниже приведены документы в БД Космос.Я использую 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 для соответствующего Имени [из API] изатем нужно применить предложение IN в других документах, чтобы найти соответствующий ответ.

Я попытался несколько запросов, как показано ниже.

Я попытался получить массив строк длястатус из document 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"
}

1 Ответ

0 голосов
/ 03 апреля 2019

В соответствии с этим случаем , cosmos db пока не поддерживает подзапрос, поэтому он говорит об ошибке рядом с оператором SELECT.

Чтобы выполнить ваши требования, я предлагаю вам использовать двойной sqlquery.

first sql, чтобы выбрать условия фильтра массива Status.

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

second sql, чтобы сопоставить состояние с условиями фильтра.

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