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

Drizzle ORM关联表findMany按嵌套字段排序问题

如何用Drizzle ORM按关联表字段排序查询结果?

你当前在嵌套的document配置里添加orderBy的方式无法实现顶层结果集的排序——嵌套的orderBy仅作用于关联子查询的内部排序,而这里每个usersToDocumentsTable条目对应唯一的document,所以这种设置完全无效。

要实现按关联document的latestUpdatedAt对结果整体排序,需要在findMany的根配置级别添加orderBy,通过关联表的关联引用直接访问document的字段:

import { eq, desc } from "drizzle-orm";

import { db } from "@/db";
import { usersTable, documentsTable, usersToDocumentsTable } from "@/db/schema";
export const getDocuments = async (userId: string) => {
  "use server";

  const documents = await db.query.usersToDocumentsTable.findMany({
    where: eq(usersToDocumentsTable.userId, userId),
    with: {
      document: {
        columns: {
          displayId: true,
          title: true,
          latestText: true,
          pinnedMessageId: true,
          retrivedMessage: true,
          latestUpdatedAt: true,
        },
      },
    },
    // 根级别配置排序,关联document的latestUpdatedAt字段
    orderBy: [desc(usersToDocumentsTable.document.latestUpdatedAt)],
  });
  return documents;
};

关键说明

  • 根级别的orderBy直接控制返回的usersToDocumentsTable条目排序顺序
  • 使用desc()会让更新时间最新的聊天室排在最前面,若需按最早更新排序则替换为asc()
  • 通过usersToDocumentsTable.document直接访问关联的documentsTable字段,是Drizzle ORM关联查询的原生语法特性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:17