簡體   English   中英

Cosmos DB 中的 MaxItemCount 提要選項屬性不起作用

[英]MaxItemCount feed options property in Cosmos DB doesnt work

我正在嘗試編寫一個運行 SQL 查詢的簡單存儲過程,我想通過使用 MaxItemCount 屬性來限制結果。 查詢生成 3 個文檔,但我只想返回 1 個文檔。 我正在使用 MaxItemCount 屬性強制執行此限制,但這似乎不起作用。

function uspGetDetailsByEmailId(EmailId) {
  var collection = getContext().getCollection();
  var collectionLink = collection.getSelfLink();
  var response = getContext().getResponse();
  var recordcount = 0;
  if (!EmailId) throw new Error("Please provide the EmailId for which     Details need to be retrieved");     

  retrieveDetails();     

  function retrieveDetails() {
    var requestOptions = {MaxItemCount: "1"};
    var dbquery = {query: "SELECT * FROM c"};
    var isAccepted = collection.queryDocuments(collectionLink, dbquery, requestOptions,function (err, results) {
      console.log(results.length)  
      response.setBody(results)
      if (err) throw err;                   
    });

    if (!isAccepted) {
      response.setBody(null);
    }
  }
}

MaxItemCount不是對整個查詢將返回的文檔數量的限制。

Cosmos DB 始終返回分頁數據。 這意味着如果您返回 100 個文檔,那么這些文檔是從許多請求返回的,每個請求都具有相同或幾乎相同數量的文檔,這是一個很好的變化。 然后將它們相加並返回。

MaxItemCount是文檔的最大帳戶,到 Cosmos DB 的單次旅行將包含,但如果您使用queryDocuments方法查詢數據,那么您將獲得相同數量的數據,但您將限制每次到 Cosmos DB 的旅行最多攜帶1 份文件。

在這種情況下,您將使用查詢迭代器並在獲得第一個文檔后轉義迭代器的循環。

深入了解這個(主要使用我能找到的唯一文檔https://azure.github.io/azure-cosmosdb-js-server )看起來存儲過程使用的 js-server 是一個不同的 SDK .

在深入研究之后,我發現 RequestOptions 對象中沒有 MaxItemCount 屬性(即使有它也會是一個整數)。 但是,您可以在https://azure.github.io/azure-cosmosdb-js-server/DocDbWrapperScript.js.html 的第 554 行中看到一個名為pageSize的屬性。

測試后,看起來將pageSize設置為 1 將成功地將您的結果限制為所需的數量。

這是更新后的代碼:

function uspGetDetailsByEmailId(EmailId) {
  var collection = getContext().getCollection();
  var collectionLink = collection.getSelfLink();
  var response = getContext().getResponse();
  var recordcount = 0;
  if (!EmailId) throw new Error("Please provide the EmailId for which     Details need to be retrieved");     

  retrieveDetails();     

  function retrieveDetails() {
    var requestOptions = { pageSize: 1};
    var dbquery = {query: "SELECT * FROM c"};
    var isAccepted = collection.queryDocuments(collectionLink, dbquery, requestOptions,function (err, results) {
      console.log(results.length)  
      response.setBody(results)
      if (err) throw err;                   
    });

    if (!isAccepted) {
      response.setBody(null);
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM