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

Django中PostgreSQL ArrayAgg成员未按预期排序的问题求助

Django中PostgreSQL ArrayAgg成员未按预期排序的问题求助

我最近在Django里用PostgreSQL的ArrayAgg做字段聚合时,遇到了一个百思不得其解的排序问题,想请教下大家!

我原本以为ArrayAgg的order_by参数能让聚合后的列表成员按指定规则排序,但实际运行结果完全不符合预期。先看这段代码:

for i in Infusate.objects.annotate(tns=ArrayAgg("tracer_links__tracer__name", order_by="tracer_links__tracer__name")).order_by("tns").distinct():
    print(i.tns)

输出结果是:

['inosine-[15N4]']
['isoleucine-[13C6,15N1]', 'leucine-[13C6,15N1]', 'valine-[13C5,15N1]']
['isoleucine-[13C6,15N1]', 'lysine-[13C6,15N2]', 'phenylalanine-[13C9,15N1]', 'threonine-[13C4,15N1]', 'tryptophan-[13C11]', 'histidine-[13C6,15N3]']

整个数据行是按列表的第一个元素排序的,这部分没问题,但列表内部的元素完全没按字母顺序排列——比如第三个列表里的histidine-[13C6,15N3],按字母顺序明明应该在isoleucine之前,结果居然排在了最后,连tryptophan都比它靠前。

更离谱的是,我把ArrayAgg里的order_by改成倒序-tracer_links__tracer__name,列表成员的顺序居然一丝一毫都没变!代码如下:

for i in Infusate.objects.annotate(tns=ArrayAgg("tracer_links__tracer__name", order_by="-tracer_links__tracer__name")).order_by("tns").distinct():
    print(i.tns)

输出和之前完全一致:

['inosine-[15N4]']
['isoleucine-[13C6,15N1]', 'leucine-[13C6,15N1]', 'valine-[13C5,15N1]']
['isoleucine-[13C6,15N1]', 'lysine-[13C6,15N2]', 'phenylalanine-[13C9,15N1]', 'threonine-[13C4,15N1]', 'tryptophan-[13C11]', 'histidine-[13C6,15N3]']

我查了相关文档,都说ArrayAgg的order_by参数是用来控制聚合后列表的内部顺序的,难道我哪里理解错了?还是代码里有我没注意到的错误?求大家帮我找找问题出在哪!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:33:01