Возврат нескольких массивов различных значений в CosmosDB

#azure-cosmosdb

#azure-cosmosdb

Вопрос:

Учитывая документы, подобные этому:

 {
  "Damage": 
    { 
      "Cause_of_Damage": ["Weather"],
      "Category": ["High"]
    }
}
  

Этот запрос возвращает массив различных значений, и он работает:

 SELECT DISTINCT VALUE i
FROM c
JOIN i IN c.Damage.Cause_of_Damage
  

Как я могу добавить "Category" свойство аналогичным образом и вернуть оба в виде массивов различных значений? Желаемый пример результата:

 {
  "cause": ["Weather"],
  "category": ["High"]
}
  

Ответ №1:

Соответствует ли это вашим требованиям?

 SELECT Array(SELECT DISTINCT VALUE i
FROM c
JOIN i IN c.Damage.Cause_of_Damage) as cause,
Array(SELECT DISTINCT VALUE j
FROM c
JOIN j IN c.Damage.Category) as category
FROM c
  

Результат:

 [
    {
        "cause": [
            "Weather"
        ],
        "category": [
            "High"
        ]
    }
]
  

Комментарии:

1. Это многообещающее начало, но это дает мне много результирующих документов вместо одного, он возвращает один результирующий документ для каждого отдельного значения. Есть ли способ объединить все различные значения в массивы одного результирующего документа?

2. На самом деле, возможно ли, что этот запрос объединения, по-видимому, создает перекрестный продукт всех объединенных результатов? Это было бы огромным количеством записей результатов.

3. Я понимаю. Насколько я знаю, это не может быть достигнуто вызовом через sql. Вам нужно выполнить два вызова.

4. Это то, чего я боялся. Спасибо!

5. Кстати, если вы уточните в своем ответе, что на самом деле это невозможно сделать в одном документе, я могу пометить ваш ответ как принятый.