BasicDBObjectBuilder没有为单个对象附加多个条件

时间:2017-08-18 10:42:17

标签: java regex mongodb mongodb-java nosql

我正在使用mongo-db的Java驱动程序并尝试使用BasicDBObjectBuilder添加多个查询条件。我有一个文本字段,其中XML存储为String,因此我们使用正则表达式来形成查询。

以下是我的查询和我得到的输出:

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

我得到的是查询:

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

第一部分是.start(“$ regex”,“。 Main&gt; [\ r \ n]&lt;。?。?。?。?action&gt;”+ MainValue +“。” )没有被添加到查询中。

你能告诉我这是什么问题吗?

1 个答案:

答案 0 :(得分: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");

这应输出类似

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

使用3.x驱动程序

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>"+".*"));