カテゴリーカラム: MongoDBの
免責事項:この記事は従って、ブロガーオリジナル記事です。 CC 4.0 BY-SAの 著作権契約を、再現し、元のソースのリンクと、この文を添付してください。
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关系