Azure Cosmos запрос для преобразования в список - PullRequest
1 голос
/ 10 марта 2019

Это мои данные JSON, которые хранятся в космосе. БД

{
    "id": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
    "Name": "Name",
    "keyData": {
        "Keys": [
            "Government",
            "Training",
            "support"
        ]
    }
}

Теперь я хочу написать запрос, чтобы исключить keyData и получить только Keys (как показано ниже)

{
    "userid": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
    "Name": "Name",
    "Keys"  :[
        "Government",
        "Training",
        "support"
    ]
}

Пока я пробовал запрос как

SELECT c.id,k.Keys  FROM c
JOIN k in c.keyPhraseBatchResult 

Что не работает.

Обновление 1:

После попытки с Sajeetharan теперь я могу получить результат, но проблема в том, что он производит другой JSON внутри массива.

Как

{
    "id": "ee885fdc-9951-40e2-b1e7-8564003cd554",
    "keys": [
        {
            "serving": "Government"
        },
        {
            "serving": "Training"
        },
        {
            "serving": "support"
        }
    ]
}

Есть ли способ извлечения только массива без повторного key value пари?

{
    "userid": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
    "Name": "Name",
    "Keys"  :[
        "Government",
        "Training",
        "support"
    ]
} 

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Вы можете попробовать это,

SELECT C.id, ARRAY(SELECT VALUE serving FROM serving IN C.keyData.Keys) AS Keys FROM C 
1 голос
/ 11 марта 2019

Пожалуйста, используйте хранимую процедуру cosmos db для реализации желаемого формата на основе @ Sajeetharan's sql.

function sample() {
    var collection = getContext().getCollection();

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT C.id,ARRAY(SELECT serving FROM serving IN C.keyData.Keys) AS keys FROM C',
    function (err, feed, options) {
        if (err) throw err;
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();
            var map = {};
             for(var i=0;i<feed.length;i++){
                 var keyArray = feed[i].keys;
                 var array = [];
                 for(var j=0;j<keyArray.length;j++){
                    array.push(keyArray[j].serving)
                 }
                 feed[i].keys = array;
             }
            response.setBody(feed);
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

Вывод:

enter image description here

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