1 or与and复杂条件查询
下面用Mongo实现关系型数据库SQL:select * from where (name="张三" and sex="男") or age >=30。
1.1 MongoDB方式查询
// 第一步:实现 (name="张三" and sex="男")
db.getCollection('user').find(
{"$and":[{"name":"张三"},{"sex":"男"}]}
)
// 第二步:实现 age >30
db.getCollection('user').find(
{"$or":[{"age":{$gte:30}}]}
)
// 第三步:将第一步参数拼接到第二步or条件里,实现最终结果
db.getCollection('user').find(
{ "$or": [
{"$and":[{"name":"张三"},{"sex":"男"}]},
{"age":{"$gte":30}}
]
}
)
1.2 spring-data-jpa mongotemplate 方式查询
// 第一步:实现 (name="张三" and sex="男")
query.addCriteria(
new Criteria().andOperator(
Criteria.where("name").is("张三"),
Criteria.where("sex").is("男")
)
);
// 第二步:实现 age >30
query.addCriteria(
new Criteria().orOperator(
Criteria.where("age").gte(30)
)
);
// 第三步:将第一步参数拼接到第二步or条件里,实现最终结果
query.addCriteria(
new Criteria().orOperator(
new Criteria().andOperator(
Criteria.where("name").is("张三"),
Criteria.where("sex").is("男")
),
Criteria.where("age").gte(300)
)
);