Cosmos DB Stored Proc не возвращает результатов - PullRequest
0 голосов
/ 28 мая 2018

Я читал ограниченную документацию и из того, что я видел, этот запрос должен работать.

// SAMPLE STORED PROCEDURE
function sample() {
var prefix = "";
var collection = getContext().getCollection();
var data = collection.readDocuments(collection.getSelfLink());
console.log(data);
console.log(JSON.stringify(data));
// Query documents and take 1st item.
var isAccepted = collection.queryDocuments(
    collection.getSelfLink(),
    'SELECT * FROM root r',
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();
        var body = { prefix: prefix, feed: feed[0] };
        response.setBody(JSON.stringify(body));
    }
});

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

В конце концов, это всего лишь пример запроса, который генерирует портал.Единственная проблема заключается в том, что он не возвращает никаких результатов.

  • Коллекция состоит из 7000 документов
  • Она разделена по типу реквизита /EmailTypeId
  • Когда я выполняю запрос, я отправляю значение раздела 5(это значение раздела для всех текущих записей)
  • Я console.log веду вызов collection.readDocuments, который должен вернуть все документы, но он просто возвращает значение true

Я пытаюсь вернуть все записи, чтобы можно было агрегировать по идентификатору и количеству.Как получить этот запрос для фактического возврата данных?

Вот пример снимка экрана одной из схем документов в коллекции
enter image description here Вот форма ввода для ввода значения раздела enter image description here

Обновление

Я создал новую коллекцию в качестве элемента управления.Эта коллекция не имеет ключа раздела, и, похоже, тот же запрос возвращает результаты в этой коллекции.Для этого проблема должна быть на 2-м снимке экрана, который я предоставил.Возможно, я неправильно предоставляю ключ раздела.

1 Ответ

0 голосов
/ 28 мая 2018

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

if (responseSize + queryPageSize < 1024 * 1024) {
      // Append query results to nodesBatch.
      nodesBatch = nodesBatch.concat(documentsRead);

      // Keep track of the response size.
      responseSize += queryPageSize;

      if (responseOptions.continuation) {
        // If there is a continuation token... Run the query again to get the next page of results
        lastContinuationToken = responseOptions.continuation;
        getNodes(responseOptions.continuation);
      } else {
        // If there is no continutation token, we are done. Return the response.
        response.setBody({
          "message": "Query completed succesfully.",
          "queryResponse": nodesBatch
        });
      }
    } else {
      // If the response size limit reached; run the script again with the lastContinuationToken as a script parameter.
      response.setBody({
        "message": "Response size limit reached.",
        "lastContinuationToken": lastContinuationToken,
        "queryResponse": nodesBatch
      });
    }
  });

Дайте мне знать, как это работает для вас.

Кроме того, проверьте название вашей коллекции и используйте это вместо root

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