我正在使用 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 public User 用户属性中。
现在,假设用户有 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 更多的参数查询订单的服务。例如,我想获取属于具有特定用户名的用户的所有订单。
最佳答案
按 ID 搜索时不需要 QueryDSL
。在OrderRepository
中,创建一个接口(interface)方法:
public List<Order> findByUser(String userId);
请求示例:curl http://localhost:8080/orders/search/findByUser?userId=5a950ea0a0deb42729b570c0
* 我被困在如何查询订单,例如,来自某个城市的所有用户的订单(一些 mongo 加入用户和地址)。
关于Spring MongoDB + QueryDSL 通过@DBRef 相关对象查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24202259/