【发布时间】:2019-05-24 13:17:59
【问题描述】:
我正在将 Spring-Data-mongo 与 query-dsl 集成,因此我需要为 query-dsl 查询生成 Q 文件 这是我的订单 POJO:
public class Order {
private List<Map<String,Object>> items;
}
我的 Order.java 的 Q 文件
public class QOrder extends EntityPathBase<Order> {
private static final long serialVersionUID = -682690651L;
public static final QOrder order = new QOrder("order");
public final ListPath<java.util.Map<String, Object>, SimplePath<java.util.Map<String, Object>>> items = this.<java.util.Map<String, Object>, SimplePath<java.util.Map<String, Object>>>createList("items", java.util.Map.class, SimplePath.class, PathInits.DIRECT2);
public QOrder(String variable) {
super(Order.class, forVariable(variable));
}
public QOrder(Path<? extends Order> path) {
super(path.getType(), path.getMetadata());
}
public QOrder(PathMetadata metadata) {
super(Order.class, metadata);
}
}
样本json的顺序是
{
"items": [{
"itemName": "phone",
"quantity": <Integer-Number>
}
]
}
现在我想从 mongo 中检索所有订单,其中任何项目都存在数量为 1。 现在我正在生成我的谓词,如下所示。 “QSensorData.sensorData.data.any().eq(Some-QueryDSL-Expression)”。
我无法确定需要在 eq 方法中传递什么来过滤嵌套映射值。
【问题讨论】:
-
据我了解查询 dsl 以使用类型安全 api 查询域类型。所以使用
Map数据类型查询不是正确的方法,你可以直接使用Document使用mongo java驱动。因此,如果您可以更新 Order pojo 以包含所有字段,然后您可以生成 Q 类并使用类型安全的方式来查询 mongodb。 -
@veeram 我提供了由上面的 querydsl 插件生成的 Q 类,请检查并告诉我有什么问题
-
数据类型Map的选择不正确。您可以更改 Order pojo 以包含项目名称、数量等字段而不是 List
标签: mongodb mongodb-query spring-data spring-data-mongodb querydsl