Создание нового свойства из имени свойства родителя через SQL в документе типа noSQL - PullRequest
1 голос
/ 19 апреля 2019

ПРОБЛЕМА

Я пытаюсь написать SQL-запрос, чтобы сделать вложенное свойство свойства частью «нового» свойства в этом соответствующем вложенном свойстве. Например, пример документа выглядит так:

[
    {
        "StudentId": "12",
        "Classes" : {
            "Math":{
               "Location": "RoomA",
               "Grade": "A"
            },
            "Science": {
                "Location": "RoomB",
                "Grade": "B"
            }
        }
    }
]

ЗАДАЧА

Цель состоит в том, чтобы запросить этот документ, чтобы получить результат, подобный следующему:

[
    {
        "StudentId": "12",
        "Classes" : {
                "Name": "Math",
                "Location": "RoomA",
                "Grade": "A"
                },
                {
                "Name": "Science",
                "Location": "RoomB",
                "Grade": "B"
                }
        }
    }
]

Мой первый шаг - выяснить, как на самом деле получить имена соответствующих классов без реальных свойств. Мой следующий запрос SQL:

SELECT t.StudentId, {"Name": t.Classes.Math} FROM t WHERE t.StudentId= "12"

схватил всю структуру внутри 'Math', например:

[
    {
        "TenantId": "12",
        "Classes": {
            "Name": {
                "Location": "RoomA",
                "Grade": "A"
            }
        }
    }
]

Редактировать: я использую это для запроса документов CosmosDB

1 Ответ

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

Вашему требованию необходимо изменить исходную структуру документа, которая не затрагивается в запросе sql.

Я предлагаю вам использовать хранимую процедуру cosmos db в качестве обходного пути, см. Мой пример кода:

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

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT r.StudentId,r.Classes FROM r',
    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();
            returnArray = [];
            for(var i =0;i<feed.length;i++){
                classArray = [];   
                for(var key in feed[i].Classes)
                {
                   var map = {};
                   map["Name"] = key;          
                   map["Location"] = feed[i].Classes[key].Location;
                   map["Grade"] = feed[i].Classes[key].Grade;
                   classArray.push(map);
                }
                feed[i].Classes = classArray;
            }         
            response.setBody(feed);
        }
    });

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

Выход:

enter image description here

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