TypeORM find方法多列排序指定及属性顺序稳定性疑问
TypeORM多列排序的对象属性顺序问题解答
JS对象属性顺序并非完全不确定:ES6及后续规范明确了,对于通过字面量定义的非数字类型字符串键,对象会保留属性的定义顺序。现代主流JS引擎(如V8、SpiderMonkey)都严格遵循这一规范,所以你在
order对象里写的属性顺序是稳定的。交换属性定义来指定排序顺序是可靠的:只要你在
order对象中按照期望的排序优先级依次定义属性,TypeORM就会按照这个顺序生成ORDER BY子句。比如你想先按id降序、再按name升序,直接调整对象属性的书写顺序即可:userRepository.find({ order: { id: "DESC", name: "ASC", }, })对应的SQL会是:
SELECT * FROM "user" ORDER BY "id" DESC, "name" ASC测试中顺序被保留的原因:TypeORM内部处理
order参数时,会直接枚举对象的属性,而枚举顺序遵循JS规范中定义的属性顺序。只要你的代码运行在支持ES6+的环境中(这也是TypeORM的运行要求),属性顺序就会被准确保留并转化为SQL的排序逻辑。
注:如果是ES6之前的极端老旧环境,属性顺序确实存在不确定性,但这类环境现在几乎不再被使用,无需考虑。
内容的提问来源于stack exchange,提问作者ILCAI
相关产品推荐
相关产品推荐

