Cosmos DB Sql, как получить внятный список элементов в массиве? - PullRequest
0 голосов
/ 14 февраля 2019

Скажем, у вас есть следующие документы, хранящиеся в cosmos db, и вы хотите получить отдельный список ключевых слов для всего документа в разделе p1.

[
    {
        "PartitionKey": "p1",
        "id": "i1",
        "Property1": "somevalue",
        "Keywords": [
            "k1"
        ]
    },
    {
        "PartitionKey": "p1",
        "id": "i2",
        "Property1": "some other value",
        "Keywords": [
            "k1",
            "k2"
        ]
    }
]

В этом случае я бы хотел получить список с k1, k2 вернулся.Я знаю, что вы можете сделать разные по отдельным свойствам, но как это сделать для значений в массиве, как это?Это возможно?

1 Ответ

0 голосов
/ 15 февраля 2019

Если вы не хотите использовать отличный для получения результата массива, вы можете сделать трюк для реализации ваших требований с помощью Cosmos DB Хранимая процедура , я думаю.Пожалуйста, смотрите мой пример js код:

// SAMPLE STORED PROCEDURE
function sample() {
    var collection = getContext().getCollection();

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT r.Keywords FROM root r where r.PartitionKey = "p1"',
    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].Keywords;
                 for(var j=0;j<keyArray.length;j++){
                        map[keyArray[j]] = keyArray[j]
                 }
                 var returnArray = [];
                 for(var key in map){
                    returnArray.push(map[key]);
                }
             }
            response.setBody(returnArray);
        }
    });

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

Вывод:

enter image description here

...