BasicDBObjectBuilder не добавляет множественные критерии для одного объекта

Я использую драйвер Java для mongo-db и пытаюсь добавить несколько критериев запроса, используя 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 + ".") Не добавляется в запрос.

Можете ли вы дать мне знать, в чем проблема?

1 ответ

Решение

Вы перезаписываете пару ключ-значение. "$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>"+".*"));
Другие вопросы по тегам