LoopBack 4关联查询:获取有订单但不返回订单数据的客户
解决LoopBack4中查询至少拥有1个订单的客户(不带订单数据)的问题
你之前的尝试里,include选项是用来加载关联的订单实体的,这就是为什么会返回订单数据;而fields选项是用来指定要返回的Customer实体本身的字段(比如{id: true, name: true}),不是用来排除关联数据的,所以这两种写法都没达到你的目标。
要实现“获取所有至少有1个订单的客户,且不返回订单数据”的需求,最直接高效的方式是使用LoopBack4的**exists过滤器**,针对关联的orders字段进行判断:
await customerRepository.find({ where: { orders: { exists: true } } });
这个查询会生成对应的SQL EXISTS子查询,检查每个客户是否存在关联的订单,同时只会返回Customer实体的数据,不会加载任何订单信息,完全符合你的需求。
如果你使用的LoopBack4版本对关联字段的exists支持有问题,还可以通过另一种方式实现:
- 先查询所有存在订单的
customerId并去重 - 再用这些ID匹配对应的客户
代码示例如下:
// 先获取所有有订单的唯一customerId const orderCustomerIds = await orderRepository.find({ fields: { customerId: true }, distinct: true }); // 提取ID数组 const ids = orderCustomerIds.map(order => order.customerId); // 查询对应客户 const customersWithOrders = await customerRepository.find({ where: { id: { inq: ids } } });
不过第一种方法更简洁高效,推荐优先使用。
内容的提问来源于stack exchange,提问作者AmenzO
相关产品推荐
相关产品推荐

