mongodb復雜條件查詢 (or與and)


分類專欄: mongodb

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接: https://blog.csdn.net/tjbsl/article/details/80620303
使用Mongodb查詢需要拼接復雜的or和and參數
MongoDb有表格:
1
"state1" : 11,
"state2" : 21,
"value" : 100
2
"state1" : 11,
"state2" : 22,
"value" : 300
3
"state1" : 11,
"state2" : 22,
"value" : 200
4
"state1" : 12,
"state2" : 21,
"value" : 300
 
要實現管理數據的如下SQL形式:
關系數據庫:select * from where(state1=11 and state2=22) or value >300
首先使用MongoDB的方式查詢:
分為以下幾個步驟實現:
步驟一:實現 (state1=11 and state2=22)
db.getCollection('testOrAnd').find(
{$and:[{"state1":11},{"state2":22}]}
)
步驟二:使用or形式實現 value >300
db.getCollection('testOrAnd'). find(
{ $or:[{"value":{$gte:300}}] }
)
步驟三:將步驟一參數拼接到步驟二or條件
db.getCollection('testOrAnd').
find({$or:
[
{$and:[{"state1":11},{"state2":22}]},{"value":{$gte:300}}
]
})
 
最終實現結果:
 
使用spring-mongotemplate的方式查詢(Criteria.where是靜態方法):
分析查詢方式,類似使用client的分析方式,分為以下幾個步驟實現:
步驟一:實現 (state1=11 and state2=22)
query.addCriteria(
new Criteria().andOperator(
Criteria.where("state1").is(11),
Criteria.where("state2").is(22)
)
);
步驟二:使用or形式實現 value >300
query.addCriteria(
new Criteria().orOperator(
Criteria.where("value").gte(300)
)
);
步驟三:將步驟一參數拼接到步驟二or條件
query.addCriteria(
new Criteria().orOperator(
Criteria.where("value").gte(300),
new Criteria().andOperator(
Criteria.where("state1").is(11),
Criteria.where("state2").is(22)
)
)
);
 
升級查詢,實際場景中要根據傳輸的參數是否為空,拼接查詢條件:
(1)如果最外層是and關系(query.add多個creterria默認為and關系)
if(條件){
query.addCriteria(Criteria.where);
}
if(條件){
query.addCriteria(Criteria.where);
}
if(條件){
query.addCriteria(Criteria.where);
}
默認拼接的query條件為and形式。
(1)如果最外層是or關系(目前只想到此笨方法)
//1.拼接參數
Criteria operator1=null;
Criteria operator2=null;
if(1==1){//模擬判斷條件
operator1 = new Criteria().andOperator(
Criteria.where("state1").is(11),
Criteria.where("state2").is(22)
);
}
if(1==1){//模擬判斷條件
operator2 = Criteria.where("value").gte(300);
}
//2.判斷參數
if(operator1!=null && operator2!=null){
query.addCriteria(new Criteria().orOperator(operator1,operator2));
}else if(operator1!=null){
query.addCriteria(operator1);
}else if(operator2!=null){
query.addCriteria(operator2);
}
 
補充:多個條件直接查詢,默認是and形式
db.getCollection('testOrAnd').find({"state1":11,"state2":22})
即query.add多個creterria默認為and關系
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM