2017-08-18 7 views
2

ためにみとめ基準を追加し、BasicDBObjectBuilderを使用して、複数のクエリ条件を追加しようとしていません。私は文字列としてXMLが格納されるテキストフィールドを持っているので、正規表現を使ってクエリを構成しています。 "、BasicDBObjectBuilderは、私はモンゴ-DBのJavaドライバーを使用しています単一のオブジェクト

{ "REQUEST_XML" : { "$regex" : ".*Details>[\r\n]<.?.?.?.?action>Change.*"} , "NAME" : "Video"} 

.start( "$の正規表現" との最初の部分:

以下

は私のクエリであると私は取得しています出力:私は、クエリとして取得しています

regexQuery.put("REQUEST_XML",BasicDBObjectBuilder 
.start("$regex", ".*Main>[\r\n]<.?.?.?.?action>"+MainValue+".*") 
.add("$regex", ".*Details>[\r\n]<.?.?.?.?action>" + DetailValue+ ".*").get()); 
regexQuery.put("NAME", "Video"); 

何があります。メイン> [\ Rの\ nを] <。?。?。?。?アクション> "+ MainValue +"。「)は、クエリに追加取得されていません。

あなたは私が問題が何であるかを教えてくださいことはできますか?

答えて

2

あなたは、キーと値のペアを上書きしています。 "$regex", ".*Details>[\r\n]<.?.?.?.?action>" + DetailValue+ ".*"は、"$regex", ".*Main>[\r\n]<.?.?.?.?action>"+MainValue+".*"を上書きします。

使用$or両方の正規表現の式を渡します。

何か

BasicDBObject regexQuery = new BasicDBObject(); 
regexQuery.put("$or", Arrays.asList(new BasicDBObject("REQUEST_XML", new BasicDBObject("$regex", ".*Main>[\r\n]<.?.?.?.?action>"+".*")), 
       new BasicDBObject("REQUEST_XML", new BasicDBObject("$regex", ".*Details>[\r\n]<.?.?.?.?action>"+".*")))); 
regexQuery.put("NAME", "Video"); 

のようにあなたは私にこの時間を保存した

import static com.mongodb.client.model.Filters.or; 
import static com.mongodb.client.model.Filters.regex; 
Bson regexQuery = or(regex("REQUEST_XML", ".*Main>[\r\n]<.?.?.?.?action>"+".*"), regex("$regex", ".*Details>[\r\n]<.?.?.?.?action>"+".*")); 
+0

3.xのドライバを使用して

{ "$or" : [{ "REQUEST_XML" : { "$regex" : ".*Main>[\r\n]<.?.?.?.?action>.*" } }, { "REQUEST_XML" : { "$regex" : ".*Details>[\r\n]<.?.?.?.?action>.*" } }], "NAME" : "Video" } 

のような出力クエリ:)私は$演算子を使用している。これは、必要がありますそれは魅力のように機能します。しかし、20 lakh以上のレコードのため、クエリは3分以上実行されます。クエリの実行時間を1分未満に最適化する方法はありますか? –

関連する問題