You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB带WHERE条件查询时continuation token不生效问题

问题根因

你代码里有两处直接导致分页失效的错误:

  1. 调用带筛选的查询时,完全没有把入参的token传入查询配置,所以每次调用接口都相当于重新执行首次查询,自然拿不到后续页的数据。
  2. 存储清空逻辑写重复了,if (!token)判断之后又写了一遍this.store.lube.removeAll(),等于不管有没有传token,每次调用都会清空已存储的历史数据,就算拿到后续页数据也会把之前加载的内容覆盖掉,容易误以为没有返回新数据。

修正后的代码

// <按可用状态查询>
async getByAvailability(availability: boolean, token?: string, limit = 5) {
  // 只有首次无token查询时才清空存储
  if (!token) this.store.lube.removeAll();
  const querySpec = {
    query: "SELECT * FROM c WHERE c.isAvailable = @availability",
    parameters: [
      {
        name: "@availability",
        value: availability,
      },
    ],
  };
  const {
    resources: items,
    continuationToken,
    hasMoreResults,
  } = await this.dbContainer.items
    .query<ILube>(querySpec, { 
      maxItemCount: limit,
      // 传入续查token,为核心修复点
      continuationToken: token 
    })
    .fetchNext();
  this.store.lube.load(items);
  return { hasMoreResults, continuationToken };
}

其他注意事项

  • 如果你的容器是多分区配置,跨分区查询的续查token要求前后两次查询的筛选条件、查询范围完全一致,不要中途修改查询参数。
  • 不同查询的continuation token不能混用,即使筛选条件只有细微差别,生成的token也不通用。
  • 建议确认你筛选的isAvailable字段已经加入容器的索引策略,未索引的字段查询扫描范围过大可能会导致分页异常。

内容的提问来源于stack exchange,提问作者D.K. Ananias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:21:02