使用带有过滤器+Where 与 Just Where 的环回计数端点的不一致结果
Inconsistent Results Using Loopback Count End-Point With Filter+Where vs. Just Where
在使用 Loopback 的 count 端点时,我们得到了意外且不一致的结果。使用 filter[where] 始终 returns table 中的总行数,忽略任何过滤器。例如,以下调用总是 returns 9 的值,这是不正确的(给定以下数据):
/api/class/count?filter[where][companyrowid]=1
Class Table数据(MySQL)
rowid description companyrowid
3367 test1 0
3366 test2 0
3364 Asia Division 1
3365 Australia Division 1
3362 Canada Division 1
3363 Europe Division 1
3359 US East Division 1
3361 US Midwest Division 1
3360 US West Division 1
奇怪的是,使用 'where[companyid]=1' returns 7 的正确值。仔细检查 http 请求对象会发现 filter[where][...] 和 where[..] 过滤器实际上是分开存储的,并且产生不同的结果:
/api/class/count?filter[where][companyrowid]=1
- req.query.filter.where = {companyid: "1"}
- req.query.where = 未定义
- 结果:9(不正确)
/api/class/count?where[companyrowid]=1
- req.query.filter.where = 未定义
- req.query.where = {companyid: "1"}
- 结果:7(正确)
最大的问题是 过滤器[其中] 忽略了过滤器。
count() 方法只接受 where 子句而不是过滤器。
所以你的 REST API 应该是这样的
/api/class/count?[where][companyrowid]=1
在使用 Loopback 的 count 端点时,我们得到了意外且不一致的结果。使用 filter[where] 始终 returns table 中的总行数,忽略任何过滤器。例如,以下调用总是 returns 9 的值,这是不正确的(给定以下数据):
/api/class/count?filter[where][companyrowid]=1
Class Table数据(MySQL)
rowid description companyrowid
3367 test1 0
3366 test2 0
3364 Asia Division 1
3365 Australia Division 1
3362 Canada Division 1
3363 Europe Division 1
3359 US East Division 1
3361 US Midwest Division 1
3360 US West Division 1
奇怪的是,使用 'where[companyid]=1' returns 7 的正确值。仔细检查 http 请求对象会发现 filter[where][...] 和 where[..] 过滤器实际上是分开存储的,并且产生不同的结果:
/api/class/count?filter[where][companyrowid]=1
- req.query.filter.where = {companyid: "1"}
- req.query.where = 未定义
- 结果:9(不正确)
/api/class/count?where[companyrowid]=1
- req.query.filter.where = 未定义
- req.query.where = {companyid: "1"}
- 结果:7(正确)
最大的问题是 过滤器[其中] 忽略了过滤器。
count() 方法只接受 where 子句而不是过滤器。 所以你的 REST API 应该是这样的
/api/class/count?[where][companyrowid]=1