Хранимая процедура Azure CosmosDB выбирает запрос из массива строк

#asp.net-core #azure-cosmosdb

#asp.net-ядро #azure-cosmosdb

Вопрос:

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

 function DeleteFn(email, docs) {
var container = getContext().getCollection();
var containerLink = container.getSelfLink();

var documentQuery =
{
    'query': 'SELECT * FROM c where c.email = @email and ARRAY_CONTAINS(@arr, c.id) ',
    'parameters': [{ 'name': '@email', 'value': email }, { 'name': '@arr', 'value': docs }]
};

container.queryDocuments(containerLink, documentQuery,
    function (err, items) {
            items.forEach(element => {
                container.deleteDocument(element, {}, function (err, responseOptions) {
                    if (err) throw err;
                });
            });
        }
    });
} 
 

где email = ‘test@test.com ‘ и docs = [«doc1″,»doc2»]

я получаю ошибку синтаксического анализа для JSON.Parse (docs).

Как выполнить этот или любой другой лучший подход к прямому удалению?

Ответ №1:

Первым параметром метода deleteDocument должна быть documentLink. Итак, вам нужно изменить свой код на это:

 container.deleteDocument(element._self, {}, function (err, responseOptions)
 

Затем, если вы передаете свои идентификаторы записей в виде типа String, вам необходимо изменить свой код следующим образом:

 'parameters' : [{'name':'@email', 'value':email}, { 'name': '@arr', 'value': JSON.parse(docs) }]
 

введите описание изображения здесь

Если вы передаете свои идентификаторы записей как пользовательский тип, ваш код может работать нормально.

 'parameters': [{ 'name': '@email', 'value': email }, { 'name': '@arr', 'value': docs }]
 

введите описание изображения здесь

Комментарии:

1. Спасибо, но для синтаксического анализа json я получаю это для точно такого же, как описано выше, JSON.ошибка синтаксического анализа: недопустимый символ в позиции: 1

2. Можете ли вы показать мне свой скриншот входных параметров при выполнении SP? Я протестировал его на своей стороне, он может работать нормально.