Nestjs-query:如何按一对一关联字段进行排序?
基于嵌套关联的排序支持情况
是的,nestjs-query 支持基于嵌套关联的排序操作,和你展示的嵌套过滤方式类似,不过需要注意一些配置细节,尤其是在使用 TypeORM 和 FilterableRelation 的场景下。
配置前提
- 确保关联字段已使用
@FilterableRelation()装饰器,且实体间的 TypeORM 关联关系(如@OneToMany、@ManyToOne)配置正确。 - 关联实体中用于排序的字段,需在其 DTO 中通过
@SortableField()标记为可排序。 - 已开启的
lookahead选项会自动处理嵌套字段的解析逻辑,无需额外配置。
嵌套排序示例查询
你可以通过点路径语法指定嵌套关联的排序字段,示例如下:
{ todoItems( filter: {nested: {completed: {is: true}}}, sorting: [ {field: "nested.completed", direction: "DESC"}, {field: "title", direction: "ASC"} ] ){ pageInfo{ hasNextPage hasPreviousPage startCursor endCursor } edges{ node{ id title completed created updated nested { id completed } } cursor } } }
注意事项
- 排序字段路径需严格对应:
关联字段名.目标字段名,比如示例中的nested.completed,nested是主实体中定义的关联字段名称。 - 对于一对多、多对多关联,排序可能会产生重复的主实体记录,nestjs-query 结合分页逻辑时会自动处理去重;若无需分页,需手动添加去重配置。
- TypeORM 对不同关联类型的排序支持存在差异:
@ManyToOne关联的排序直接可行;@OneToMany关联需确保查询时正确建立表关联。
内容的提问来源于stack exchange,提问作者Olena Yedyharova
相关产品推荐
相关产品推荐

