Spring MongoDB + QueryDSL 通过@DBRef 相关对象查询

标签 spring mongodb spring-data-mongodb querydsl dbref

我正在使用 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/

相关文章:

arrays - MongoDB - 查询数组的最后一个元素?

java - 构建 spring-crow-security 示例时出现 Maven 错误

spring - 创建maven项目时如何选择过滤器编号?

java - 使用 Java 从 MongoDB 返回多个文档

mongodb - 为什么mongodb会找到这个文档($ne : null for array)

javascript - 带 lodash/下划线的聚合排序限制

java - 如何使用 Java Spring Boot 更新 MongoDB 中的数组字段?

java - 使用 Spring-Integration(仅限注释)获取具有某些字段(投影)的 mongodb 文档

java - 多对多关系 : save the transient instance before flushing

java - 为什么 BeanCopier 不能复制属性?