Строки запроса Cosmos DB в массиве сохраняют группировку и обрезают значение? - PullRequest
2 голосов
/ 15 апреля 2020

Скажем, у нас в коллекции два набора данных:

{
  "id": "111",
  "linkedId": [
    "ABC:123",
    "ABC:456"
  ]
}
{
  "id": "222",
  "linkedId": [
    "DEF:321",
    "DEF:654"
  ]
}

Какой запрос я могу запустить, чтобы получить результат, который будет выглядеть следующим образом?

{
  [
    "123",
    "456"
  ]
},
{
  [
    "321",
    "654"
  ]
}

Я пытался

SELECT c.linkedId FROM c

Но в качестве имени свойства в наборе результатов в качестве имени свойства указывается «связанный идентификатор». И я попробовал ВЛЕВО, но он не обрезал первые 4 символа строки.

Затем я попытался

SELECT value cc FROM cc In c.linkedId

Но это теряет группировку.

Есть идеи?

1 Ответ

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

Поскольку элементы являются просто строками, а не json объектом, я предлагаю вам использовать UDF в запросе cosmos db sql.

UDF:

function userDefinedFunction(arr){
    var returnArr = [];
    for(var i=0;i<arr.length;i++){
        returnArr.push(arr[i].substring(4,7));
    }
    return returnArr;
}

SQL:

SELECT value udf.test(c.linkedId) FROM c

ВЫХОД:

enter image description here

...