(ととや)複雑な条件クエリをMongoDBの

カテゴリーカラム:  MongoDBの

免責事項:この記事は従って、ブロガーオリジナル記事です。 CC 4.0 BY-SAの 著作権契約を、再現し、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/tjbsl/article/details/80620303
MongoDBのクエリは、複雑またはステッチやパラメータを使用する必要があり、
そこMongoDBのテーブル:
1
"STATE1":11、
"STATE2":21、
"値":100
2
"STATE1":11、
"STATE2":22、
"値":300
3
"STATE1":11、
"STATE2":22、
"値":200
4
"STATE1":12、
"STATE2":21、
"値":300
 
次のSQLの形式でデータの管理を達成するために:
リレーショナル・データベース:ここで、(STATE1 = 11、STATE2 = 22)または値> 300 SELECT * FROM
MongoDBのクエリの方法を使用して最初に:
達成するために、次のステップに分け:
ステップ:(STATE1 = 11、STATE2 = 22)を実装
db.getCollection( 'testOrAnd')。を見つけます(
{$や:[{ "STATE1":11}、{ "STATE2":22}]}
ステップ2:使用または値を実現形態> 300
db.getCollection( 'testOrAnd')。(見つけます
{$または:[{ "値":{$ GTE:300}}]}
ステップ3:二段階又は条件へのスプライシングパラメータのステップ
db.getCollection( 'testOrAnd')。
:({$または見つけます
[
{$や:[{ "STATE1":11}、{ "STATE2":22}]}、{ "値":{$ GTE:300}}
]
})
 
最終的には結果:
 
使用クエリに春-mongotemplate方法(Criteria.where静的メソッド):
クエリ分析、達成するために次のステップに分かれクライアントモードを使用して、同様の解析:
ステップ:(STATE1 = 11、STATE2 = 22)を実装
query.addCriteria(
新基準()。andOperator(
Criteria.where( "STATE1")が。(11)です、
Criteria.where( "STATE2")。される(22)
);
ステップ2:使用または値を実現形態> 300
query.addCriteria(
新基準()。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关系
 
 

おすすめ

転載: www.cnblogs.com/kelelipeng/p/12010554.html