[英]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.