Замена для пункта в CosmosDB - PullRequest
1 голос
/ 20 января 2020

У меня есть следующий результат запроса, где поле count получено из агрегатной функции

[
    {
        "count": 1,
        "facilityName": "Hyundai Service Center"
    },
    {
        "count": 2,
        "facilityName": "Honda Service Center"
    },
    {
        "count": 1,
        "facilityName": "Kat Service Center"
    }
]

Я хочу отображать только те имя объекта, где count> = 2.

Как мы можем достичь этого?

1 Ответ

2 голосов
/ 20 января 2020

Я пытался выполнить ваше требование с помощью хранимой процедуры, пожалуйста, обратитесь к моему SP-коду:

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

    var length = idArray.length;

    var sqlQuery = {
        "query":  'SELECT count(c.id) as cnt, f.facilityName from c join f in c.facilities '+
        'where array_contains( @idArray,c.id,true) ' +
        'AND c.entityType = "ServiceInformationFacility" group by f.facilityName',
        "parameters": [
            {"name": "@idArray", "value": idArray}
        ]
    }

    // Query documents and take 1st item.
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        sqlQuery,
    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 returenArray = [];
            for(var i=0;i<feed.length;i++){                
                if(feed[i].cnt==length)
                    returenArray.push(feed[i])
            }

            response.setBody(returenArray);
        }
    });

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

Входной параметр:

["6ECF4568-CB0E-4E11-A5CD-1206638F9C39","2ECF4568-CB0E-4E11-A5CD-1206638F9C39"]

enter image description here

Получить вывод:

enter image description here


ОБНОВЛЕНИЯ:

Итак, если ваша коллекция разделена, возможно, хранимая процедура не подходит для вас, поскольку для выполнения SP необходим ключ раздела. Пожалуйста, обратитесь к моим подробным объяснениям в этой теме: Удаление документов из Cosmos с использованием запроса без указания ключа раздела

На самом деле , в моем приведенном выше sp-коде нет сложной логики c. Это просто l oop результат sql и попытка найти, который object.count равен idArray.length, что означает, что object.facilityName существует во всех документы.

Итак, вам не нужно использовать SP, вы можете использовать любой маленький кусочек кода для обработки логики c, которую я описал выше.

...