Loopback:如何组合Where条件与多字段Order By排序?
解决Person模型查询的排序问题
我懂你现在的困扰——当前的查询能正确过滤出符合条件的Person数据,但结果顺序完全随机,想要按createddate升序、orderdate降序排序,却不知道怎么把过滤条件和排序规则结合起来。
其实问题很简单,你不需要用and来组合Where和Order By,因为这类REST API(看起来是LoopBack框架的风格)里,filter参数是一个包含多维度查询配置的JSON对象,where(过滤条件)和order(排序规则)是同级属性,直接放在同一个filter对象里就行。
正确的查询URL示例
http://127.0.0.1:8082/api/persons?filter={"where":{"and":[{"roleid":"2"},{"personid":{"inq":["1","2","3"]}}]},"order":["createddate ASC", "orderdate DESC"]}
关键细节说明
- 原有的
where过滤逻辑完全保留,不需要修改; - 新增的
order是一个数组,每个元素对应一条排序规则:createddate ASC:优先按创建日期升序排列(旧数据在前,新数据在后)orderdate DESC:当createddate相同时,再按订单日期降序排列(新数据在前,旧数据在后)
可选优化:URL编码
如果你的请求工具对未编码的JSON字符兼容性较差,可以把filter内的JSON做URL编码,避免{}、:、"这类特殊字符导致解析异常,编码后的URL如下:
http://127.0.0.1:8082/api/persons?filter=%7B%22where%22%3A%7B%22and%22%3A%5B%7B%22roleid%22%3A%222%22%7D%2C%7B%22personid%22%3A%7B%22inq%22%3A%5B%221%22%2C%222%22%2C%223%22%5D%7D%7D%5D%7D%2C%22order%22%3A%5B%22createddate%20ASC%22%2C%22orderdate%20DESC%22%5D%7D
这样请求后,返回的结果就会严格按照你想要的顺序排列啦!
内容的提问来源于stack exchange,提问作者tx fun
相关产品推荐
相关产品推荐

