Как объединить списки одного документа CosmosDb - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть документ, который имеет 2 атрибута списка

{
   CurrentDocument:[
      { DocName: "name1", DocType: "Identity" },
      { DocName: "name2", DocType: "Authorization" }
   ],
   ClosedDocument:[
      { DocName: "name3", DocType: "Passport" }
   ]
}

Я хочу запрос, который возвращает DocName & DocType из моих двух списков. Я не могу использовать Join, потому что, если один из списка пуст, мой запрос ничего не возвращает. Кроме того, в случае объединения я не могу объединить все свои атрибуты в один список.

SELECT cur.DocName AS curName, clo.DocName AS cloName FROM c JOIN cur IN c.CurrentDocument JOIN clo IN c.ClosedDocument

Этот запрос не тот, который я ищу:

  • если один список пуст, я потерял все данные
  • Я получаю список значений n * m с дубликатами (n: номер CurrentDocument, m: номер ClosedDocument)

Я попытался использовать выражение Union, но не могу заставить его работать в запросе.

Заранее спасибо.

1 Ответ

1 голос
/ 20 апреля 2020

Используйте UDF для этого. Создайте следующий UDF

function userDefinedFunction(current, closed){
return current.concat(closed);}

Используйте его в своем запросе

SELECT udf.MergeLists(o.CurrentDocument, o.ClosedDocument) as merged FROM Orders o WHERE o.id = 'a811d13f-a308-4df1-85c1-31e566e9fc1e'

Это возвращает следующее

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...