我使用spring-data-mongodb和querydsl-mongodb来执行更灵活的查询。
我的应用程序有用户和订单。 用户可以拥有多个订单,因此我的模型如下所示:
public class User {
@Id
private String id;
private String username;
//getters and setters
}
public class Order {
@Id
private String id;
@DBRef
private User user;
//getters and setters
}
正如您所看到的,用户和订单之间存在很多关系。 每个订单都分配给用户,用户存储在@DBRef公共用户用户属性中。
现在,假设用户有10,000个订单。
如何让查询获取属于特定用户的所有订单?
我有OrderRepository:
public interface OrderRepository extends MongoRepository<Order, String>,
QueryDslPredicateExecutor<Order> {
}
我试过这个解决方案,但它不会返回任何内容:
QOrder order = new QOrder("order");
Pageable pageable = new PageRequest(0, 100);
return userRepository.findAll(order.user.id.eq(anUserId), pageable);
我需要使用querydsl,因为我想构建一个服务,可以通过比userid更多的参数来查询订单。例如,我想获得属于具有特定用户名的用户的所有订单。
答案 0 :(得分:1)
按ID搜索时无需QueryDSL
。在OrderRepository
中,创建一个接口方法:
public List<Order> findByUser(String userId);
请求示例:curl http://localhost:8080/orders/search/findByUser?userId=5a950ea0a0deb42729b570c0
*我一直坚持如何查询某些城市的所有用户的订单(有些mongo加入了用户和地址)。