我想从cosmos DB获取最大的id。直到cosmos DB包含的文档少于1000个时,下面的代码才能正常工作。如果超过1000个文档,则始终将999作为最大值。
试图在FeedOptions中添加MaxItemCount = -1。
public async Task<int> GetMaxId()
{
try
{
var option = new FeedOptions { EnableCrossPartitionQuery = true ,MaxItemCount=-1};
// SQL
var familiesSqlQuery = client.CreateDocumentQuery(cosmosConnector,
"SELECT value max(c.id) FROM c", option).AsDocumentQuery();
var val = await familiesSqlQuery.ExecuteNextAsync();
var s = val.FirstOrDefault();
return int.Parse(s.ToString());
}
catch
{
throw;
}
}
答案 0 :(得分:0)
实现所需目标的可靠方法如下:
public async Task<int> GetMaxId()
{
try
{
var maxValue = 0;
var option = new FeedOptions { EnableCrossPartitionQuery = true };
// SQL
var familiesSqlQuery = client.CreateDocumentQuery(cosmosConnector,
"SELECT c.id FROM c", option).AsDocumentQuery();
while(familiesSqlQuery.HasMoreResults)
{
var ids = await familiesSqlQuery.ExecuteNextAsync();
var maxIdInBatch = ids.Select(int.Parse).Max();
if(maxIdInBatch > maxValue)
{
maxValue = maxIdInBatch;
}
}
return maxValue;
}
catch
{
throw;
}
}
之所以如此,是因为您将在所有结果中分页,因此您的RU不会因为一个呼叫而被耗尽。这将花费更长的时间,但是它将是可靠和准确的。