BasicDBObject Builder 不为单个对象附加多个条件
BasicDBObjectBuilder not appending mutiple criteria for a single object
我正在为 mongo-db 使用 Java 驱动程序,并尝试使用 BasicDBObjectBuilder 添加多个查询条件。我有一个文本字段,其中 XML 存储为字符串,因此我们使用正则表达式来形成查询。
下面是我的查询和得到的输出:
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>[\r\n]<.?.?.?.?action>"+MainValue+".") 未添加到查询中。
你能告诉我问题是什么吗?
您正在覆盖键值对。 "$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>"+".*"));
我正在为 mongo-db 使用 Java 驱动程序,并尝试使用 BasicDBObjectBuilder 添加多个查询条件。我有一个文本字段,其中 XML 存储为字符串,因此我们使用正则表达式来形成查询。
下面是我的查询和得到的输出:
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>[\r\n]<.?.?.?.?action>"+MainValue+".") 未添加到查询中。
你能告诉我问题是什么吗?
您正在覆盖键值对。 "$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>"+".*"));