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

如何在Drizzle ORM的query.findMany中使用count()函数?

在Drizzle ORM中使用count()统计关联表数量(适配findMany场景)

直接在findMany的extras字段里用count(products.id)统计关联表数量是行不通的——findMany的with是用来做关联查询返回嵌套数组的,而聚合函数需要在SQL层面做分组统计,两者逻辑不兼容。

给你两个目前可行的解决方案:

方案一:手动构建聚合查询

用db.select()结合leftJoin和分组统计,直接在SQL层面完成计数:

const items = await useDb().select({
  id: orders.id,
  status: orders.status,
  products_count: sql`count(${products.id})`.as('products_count'),
})
.from(orders)
.leftJoin(products, eq(orders.id, products.orderId))
.groupBy(orders.id, orders.status);

方案二:代码层面补统计

如果需要同时获取关联的products详细数据和数量,可以先通过findMany拿到完整关联数据,再在代码里计算长度:

const items = await useDb().query.orders.findMany({
  columns: {
    id: true,
    status: true,
  },
  with: {
    products: {
      columns: {
        id: true,
      },
    },
  },
});

// 给每个订单加上产品数量
const itemsWithCount = items.map(order => ({
  ...order,
  products_count: order.products.length,
}));

目前Drizzle ORM的findMany API还不支持在extras中直接使用关联表的聚合函数,这个需求在社区(包括Discord)确实被多次提及,但官方暂未推出原生支持的方案,上面两种是当前能实现需求的替代方式。

内容的提问来源于stack exchange,提问作者Mick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:22:07