spring - Spring Data MongoDB 构建动态查询
问题描述
需要帮助来构建动态 MongoDB 查询。"$or" 数组中的所有内容都是动态的。
db.group.find({
"version" : NumberLong(0),
"$or" : [{
"$and" : [
{
"object_type" : "D"
},
{
"type" : "R"
},
{
"name" : "1"
}
]
},{
"$and" : [
{
"object_type" : "D"
},
{
"type" : "E"
},
{
"name" : "2"
}
]
]
});
是否进行了以下弹簧数据查询但不起作用
Criteria criteria = Criteria.where("version").is("123");
List<Criteria> docCriterias = new ArrayList<Criteria>();
groups.stream().forEach(grp -> {
docCriterias.add(Criteria.where("type").is(grp.get("type").toString())
.andOperator(Criteria.where("object_type").is(grp.get("objectType").toString()))
.andOperator(Criteria.where("name").is(grp.get("name").toString())));
});
criteria.orOperator((Criteria[]) docCriterias.toArray());
Query q = new Query(criteria);
谢谢您的帮助
解决方案
您应该注意如何组合运算符。
ff 代码应该对你有用(注意这是 groovy 记得将闭包更改为 java lambda 表达式):
List<Criteria> docCriterias = new ArrayList<Criteria>();
List groups = [
[
type: "type1",
object_type: "object_type1",
name: "name1"
],
[
type: "type2",
object_type: "object_type2",
name: "name2"
],
[
type: "type3",
object_type: "object_type3",
name: "name3"
],
]
groups.stream().each {grp ->
docCriterias.add(new Criteria().andOperator(
Criteria.where("type").is(grp.get("type")),
Criteria.where("object_type").is(grp.get("object_type")),
Criteria.where("name").is(grp.get("name"))
))
};
Criteria criteria = new Criteria().andOperator(
Criteria.where("version").is("123"),
new Criteria().orOperator(docCriterias.toArray(new Criteria[docCriterias.size()]))
);
Query q = new Query(criteria);
这会给你这个查询:
{
"$and":[
{
"version":"123"
},
{
"$or":[
{
"$and":[
{
"type":"type1"
},
{
"object_type":"object_type1"
},
{
"name":"name1"
}
]
},
{
"$and":[
{
"type":"type2"
},
{
"object_type":"object_type2"
},
{
"name":"name2"
}
]
},
{
"$and":[
{
"type":"type3"
},
{
"object_type":"object_type3"
},
{
"name":"name3"
}
]
}
]
}
]
},
Fields:{
},
Sort:{
}
推荐阅读
- json - 如何读取 $ussdResponse->Message 中的值
- r - 如何使用r中的两个向量和逻辑运算符形成逻辑“1”和“0”的矩阵?
- spring-mvc - Spring:@Valid 总是返回 False
- python-3.x - 通过删除无穷大来创建数组
- java - 如何检索 IoT 中心数据的属性,而不仅仅是实际有效负载
- kubernetes - 如何在 Kubernetes 中配置已经运行的集群
- google-maps - 如何在 vuetify 项目中使用本地文件获取自定义 gmap 图标
- python - 如何使用 tf.constant 或 numpy 数组初始化 tf.Variable?
- typescript - 必须初始化的类的打字稿类型
- java - 复制时显示电子中复制的内容