Запрос с CONTAINS на число, приведенное к строке в хранимой процедуре, не работает - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь написать хранимую процедуру в cosmos db для выполнения запроса, который возвращает несколько объектов в зависимости от 2 свойств: строки и целого числа.Параметры, принимаемые процедурой, должны быть строковыми, но вторым свойством в документе является int.

Запрос работает хорошо, когда он выполняется вне процедуры, но когда он находится в процедуре, он каждый раз возвращает пустой массив,

Я пытался создать процедуру с помощью простого запроса, например: 'SELECT * FROM listeLignes l', но он также каждый раз возвращает пустой массив.

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

В коллекции не так много объектов.

function LigneVoiesByCodeLigneOrText(libelle, codeLigne) {
    var collection = getContext().getCollection();

    var query = 'SELECT * FROM l WHERE 1=1 ';

    if(libelle != null){
        query = query + 'AND CONTAINS(l.libelle, "'+ libelle +'") ';
    }

    if(codeLigne != null){
       query = query + 'AND CONTAINS(toString(l.codeLigne), "'+ codeLigne +'") ';
    }

    console.log(query);

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        query,
        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 body = { feed : feed[0] };
                response.setBody(JSON.stringify(body));
            }
        });

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

1 Ответ

0 голосов
/ 10 мая 2019

Так как There is not a lots of objects in the collection вы сказали, вы можете сделать трюк в вашем sql с udf в космосе дБ.

udf:

enter image description here

хранимая процедура: (уведомление CONTAINS(udf.bbb(l.countyid), пожалуйста)

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

    var query = 'SELECT l.id,l.countyid FROM l WHERE 1=1 ';

    if(libelle != null){
        query = query + 'AND CONTAINS(l.id, "'+ libelle +'") ';
    }

    if(codeLigne != null){
       query = query + 'AND CONTAINS(udf.bbb(l.countyid), "'+ codeLigne +'") ';
    }

    console.log(query);

    // Query documents and take 1st item.
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        query,
    function (err, feed, options) {
        if (err) throw err;

        // Check the feed and if empty, set the body to 'no docs found', 
        // else take 1st element from feed
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();
            response.setBody(feed);
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...