garyG
Convex Community8mo ago
3 replies
gary

long running queries

hi all, any idea how can i fix "This query or mutation function ran multiple paginated queries. Convex only supports a single paginated query in each function."?

export const queryItems = query({
  args: {
    pagination: paginationValidator,
  },
  handler: async (ctx, args) => {
    let rawItemsA: {
      category: string
      label: string
      value: number
      quantity: number
      imageUrl: string
    }[] = []
    let rawItemsB: {
      category: string
      name: string
      value: number
      logoUrl: string
    }[] = []

    for (const category of SUPPORTED_CATEGORIES) {
      const itemsAChunk = await ctx.db
        .query("itemsA")
        .withIndex("by_category", (q) => q.eq("category", category))
        .paginate(args.pagination)
      const itemsBChunk = await ctx.db
        .query("itemsB")
        .withIndex("by_category", (q) => q.eq("category", category))
        .paginate(args.pagination)
      rawItemsA = [...rawItemsA, ...itemsAChunk.page]
      rawItemsB = [...rawItemsB, ...itemsBChunk.page]
    }

    const groupedA = aggregateItemsA(rawItemsA)
    const groupedB = aggregateItemsB(rawItemsB)

    const combinedItems: CombinedItem[] = [
      ...Object.values(groupedA),
      ...Object.values(groupedB),
    ].sort((a, b) => {
      const byValue = b.value - a.value
      if (byValue !== 0) return byValue
      return a.label.localeCompare(b.label)
    })

    return combinedItems
  },
})
Was this page helpful?